<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Víctor Alcántara - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Víctor Alcántara - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 16:03:26 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/vardeveloper/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo codificar un scraping Bot con Selenium y Python. ]]>
                </title>
                <description>
                    <![CDATA[ Selenium es una herramienta diseñada para ayudarle a ejecutar pruebas automatizadas en aplicaciones web. Está disponible en varios lenguajes de programación. Aunque no es su propósito principal, Selenium también se usa en Python para web scraping, porque puede acceder a contenido renderizado en JavaScript (lo que las herramientas de scraping ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-codificar-un-scraping-bot-con-selenium-y-python/</link>
                <guid isPermaLink="false">6096a2b6eaa005076666020c</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Víctor Alcántara ]]>
                </dc:creator>
                <pubDate>Thu, 01 Jul 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/05/5ffd8f3b75d5f706921cc190.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Selenium es una herramienta diseñada para ayudarle a ejecutar pruebas automatizadas en aplicaciones web. Está disponible en varios lenguajes de programación.</p><p>Aunque no es su propósito principal, Selenium también se usa en Python para web scraping, porque puede acceder a contenido renderizado en JavaScript (lo que las herramientas de scraping normales como BeautifulSoup no pueden hacer).</p><p>Selenium también es útil cuando necesita interactuar con la página de alguna manera antes de recopilar los datos, como hacer clic en botones o completar campos. Este es el caso de uso que se cubrirá en este artículo.</p><p>Como ejemplo,<em> </em>haremos scraping<em> a </em>investing.com para extraer datos históricos de los tipos de cambio del dólar frente a una o más monedas.</p><p>Si busca en la web, puede encontrar APIs y paquetes de Python que facilitan mucho la recopilación de datos financieros (en lugar de hacer scraping<em> </em>manualmente). Sin embargo, la idea aquí es explorar cómo Selenium puede ayudarle con la extracción general de datos .</p><h2 id="el-sitio-web-que-vamos-a-hacer-scraping">El sitio web que vamos a hacer scraping</h2><p>En primer lugar, necesitamos entender el sitio web. <a href="https://www.investing.com/currencies/usd-eur-historical-data">Este sitio</a> contiene los datos históricos del tipo de cambio del dólar frente al euro.</p><p>En esta página, puede ver una tabla con los datos y la opción de establecer el rango de fechas que queremos. Eso es lo que vamos a usar.</p><p>Para ver los datos de otras monedas frente al dólar, simplemente reemplace “<em>eur</em>” por el otro código de divisa en la URL.</p><p>Además, esto supone que solo querrá el tipo de cambio de la moneda frente al dólar. Si ese no es el caso, simplemente reemplace el “<em>usd</em>” en la URL.</p><h2 id="el-c-digo-scraper">El código scraper</h2><p>Empezaremos con las importaciones, y no necesitamos mucho. Vamos a importar algunos elementos útiles de Selenium: la función <code>sleep</code> para insertar algunas pausas en el código, y Pandas para manipular la fecha cuando sea necesario.</p><pre><code class="language-python">from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
import pandas as pd</code></pre><p>A continuación, escribiremos una función para hacer scraping a los datos. La función recibirá:</p><ul><li>Una lista de códigos de divisas</li><li>Una fecha de inicio</li><li>Una fecha de finalización</li><li>Un booleano que informa si queremos exportar los datos como un archivo <em>.csv</em>. Usaré False como predeterminado.</li></ul><p>Además, como la idea aquí es construir un scraper capaz de recopilar datos sobre múltiples monedas, también inicializaremos una lista vacía para almacenar los datos de cada moneda.</p><pre><code class="language-python">def get_currencies(currencies, start, end, export_csv=False):
    frames = []</code></pre><p>Como la función ahora tiene una lista de monedas, probablemente imaginará que iteraremos sobre esta lista y obtendremos los datos por moneda. Ese es precisamente el plan.</p><p>Entonces, para cada moneda en la lista de monedas, crearemos una URL, instanciaremos un objeto <code>driver</code> , y lo usaremos para obtener la página. Luego maximizaremos la ventana, pero eso solo es visible si mantiene <code>option.headless</code> como False. De lo contrario, Selenium hará todo el trabajo sin mostrarte nada.</p><pre><code class="language-python">for currency in currencies:
    my_url = f'https://br.investing.com/currencies/usd-{currency.lower()}-historical-data'
    option = Options()
    option.headless = False
    driver = webdriver.Chrome(options=option)
    driver.get(my_url)
    driver.maximize_window()</code></pre><p>Ya estamos viendo los datos históricos en este momento, y podríamos obtener la tabla con los datos. Sin embargo, de forma predeterminada, solo vemos los datos de los últimos 20 días. Queremos obtener estos datos para cualquier período de tiempo.</p><p>Para ello, usaremos algunas funcionalidades interesantes de Selenium para interactuar con el sitio web. ¡Aquí es cuando Selenium brilla!</p><p>Lo que haremos aquí es hacer clic en las fechas y completar los campos Fecha de Inicio y Fecha de Finalización con las fechas que queremos y presionar Aplicar.</p><p>Para ello, usaremos <code>WebDriverWait</code>, <code>ExpectedConditions</code>, y <code>By</code> &nbsp;para asegurarnos de que el controlador web esperará a que se pueda hacer clic en los elementos con los que queremos interactuar.</p><p>Esto es importante porque si el driver intenta interactuar con algo antes de que se pueda hacer clic, se generará una excepción.</p><p>El tiempo de espera será de veinte segundos, pero depende de ti configurarlo como considere apropiado. Primero, seleccionemos el botón de fecha por su XPath y luego hagamos clic en él.</p><pre><code class="language-python">date_button = WebDriverWait(driver, 20).until(
              EC.element_to_be_clickable((By.XPATH,
              "/html/body/div[5]/section/div[8]/div[3]/div/div[2]/span")))

date_button.click()</code></pre><p>Ahora, necesitamos llenar el campo Fecha de Inicio. Primero seleccionémoslo y luego usemos <code>clear</code> para eliminar la fecha predeterminada y <code>send_keys</code> para llenarlo con la fecha que queremos.</p><pre><code class="language-python">start_bar = WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((By.XPATH, 
	        "/html/body/div[7]/div[1]/input[1]")))

start_bar.clear()
start_bar.send_keys(start) </code></pre><p>Y ahora repetimos el proceso para el campo Fecha de Finalización.</p><pre><code class="language-python">end_bar = WebDriverWait(driver, 20).until(
          EC.element_to_be_clickable((By.XPATH, 
          "/html/body/div[7]/div[1]/input[2]")))

end_bar.clear()
end_bar.send_keys(end)</code></pre><p>Una vez hecho esto, seleccionaremos el botón Aplicar y haremos clic en él. Luego usamos <code>sleep</code> para pausar el código durante unos segundos y asegurarnos de que la nueva página esté completamente cargada.</p><pre><code class="language-python">apply_button = WebDriverWait(driver, 20).until(
	           EC.element_to_be_clickable((By.XPATH,  
               "/html/body/div[7]/div[5]/a")))

apply_button.click()
sleep(5)</code></pre><p>Si tenías <code>option.headless</code> como False, verás todo este proceso sucediendo frente a ti como si alguien estuviera haciendo clic en la página. Cuando Selenium haga clic en Aplicar, verá que la tabla se recarga para mostrar los datos para el período de tiempo que especifico.</p><p>Ahora usamos la función <code>pandas.read_html</code> para seleccionar todas las tablas de la página. Esta función recibirá el código fuente de la página. Finalmente, podemos salir del controlador.</p><pre><code class="language-python">dataframes = pd.read_html(driver.page_source)
driver.quit()
print(f'{currency} scraped.')</code></pre><h2 id="c-mo-manejar-excepciones-en-selenium">Cómo manejar excepciones en Selenium</h2><p>El proceso de recopilación de datos está hecho. Pero tenemos que considerar que Selenium a veces puede ser un poco inestable y eventualmente podría no cargar la página en algún momento durante todas las acciones que estamos realizando aquí.</p><p>Para evitar eso, tendremos el código completo dentro de una cláusula <code>try</code> que estará dentro de un bucle infinito. Una vez que Selenium logre recopilar los datos como describí anteriormente, el ciclo se romperá. Pero cada vez que encuentre un problema, se activará una cláusula de <code>expect</code>.</p><p>En este escenario, el código:</p><ul><li>Salir del controlador – siempre es importante hacer esto para que no terminemos con docenas de controladores web que consumen memoria en ejecución.</li><li>Imprime un mensaje indicando el error</li><li>Dormir por treinta segundos</li><li>Ir al inicio del bucle una vez más</li></ul><p>Este proceso se repetirá hasta que los datos de cada moneda se recopilen correctamente. Y este es el código para todo esto:</p><pre><code class="language-python"> for currency in currencies:
        while True:
            try:
                # Opening the connection and grabbing the page
                my_url = f'https://br.investing.com/currencies/usd-{currency.lower()}-historical-data'
                option = Options()
                option.headless = False
                driver = webdriver.Chrome(options=option)
                driver.get(my_url)
                driver.maximize_window()
                   
                # Clicking on the date button
                date_button = WebDriverWait(driver, 20).until(
                            EC.element_to_be_clickable((By.XPATH,
                            "/html/body/div[5]/section/div[8]/div[3]/div/div[2]/span")))
                
                date_button.click()
                
                # Sending the start date
                start_bar = WebDriverWait(driver, 20).until(
                            EC.element_to_be_clickable((By.XPATH,
                            "/html/body/div[7]/div[1]/input[1]")))
                            
                start_bar.clear()
                start_bar.send_keys(start)

                # Sending the end date
                end_bar = WebDriverWait(driver, 20).until(
                            EC.element_to_be_clickable((By.XPATH,
                            "/html/body/div[7]/div[1]/input[2]")))
                            
                end_bar.clear()
                end_bar.send_keys(end)
               
                # Clicking on the apply button
                apply_button = WebDriverWait(driver,20).until(
                		EC.element_to_be_clickable((By.XPATH,
                		"/html/body/div[7]/div[5]/a")))
                
                apply_button.click()
                sleep(5)
                
                # Getting the tables on the page and quiting
                dataframes = pd.read_html(driver.page_source)
                driver.quit()
                print(f'{currency} scraped.')
                break
            
            except:
                driver.quit()
                print(f'Failed to scrape {currency}. Trying again in 30 seconds.')
                sleep(30)
                continue
</code></pre><p>Un último paso, sin embargo. Si recuerda, lo que tenemos hasta ahora es una lista que contiene todas las tablas de la página almacenadas como DataFrames. Necesitamos seleccionar la única tabla que contiene los datos históricos que queremos.</p><p>Para cada DataFrame en esta lista de marcos de datos, verificaremos si el nombre de sus columnas coincide con lo que esperamos. Si lo hacen, entonces ese es nuestro marco y rompemos el bucle. Y ahora finalmente estamos listos para agregar este DataFrame a la lista que se inicializó al principio.</p><pre><code class="language-python">for dataframe in dataframes:
    if dataframe.columns.tolist() == ['Date', 'Price', 'Open', 'High', 'Low', 'Change%']:
        df = dataframe
        break

frames.append(df)</code></pre><p>Y sí, si el parámetro <code>export_csv</code> se estableció en True, necesitaríamos exportar un archivo <em>.csv</em>. Pero eso está lejos de ser un problema, ya que el método <code>DataFrame.to_csv</code> puede hacer esto fácilmente.</p><p>Y luego podemos terminar esta función devolviendo la lista de DataFrames. Este último paso está hecho después de que el bucle a través de la lista de monedas ha terminado, por supuesto.</p><pre><code class="language-python">if export_csv:
        df.to_csv('currency.csv', index=False)
        print(f'{currency}.csv exported.')

# Outside of the loop
return frames</code></pre><p>¡Y eso es todo! Aquí está el código completo para estos dos últimos pasos combinados:</p><pre><code class="language-python">		# Selecting the correct table            
        for dataframe in dataframes:
            if dataframe.columns.tolist() == ['Date', 'Price', 'Open', 'High', 'Low', 'Change%']:
                df = dataframe
                break
        frames.append(df)

        # Exporting the .csv file
        if export_csv:
            df.to_csv('currency.csv', index=False)
            print(f'{currency}.csv exported.')
                  
  return frames</code></pre><h2 id="pr-ximos-pasos-y-conclusi-n">Próximos pasos y conclusión</h2><p>Hasta ahora, este código obtiene los datos históricos del tipo de cambio de una lista de monedas frente al dólar y devuelve una lista de DataFrames y varios archivos <em>.csv</em>.</p><p>Pero siempre hay margen de mejora. Con algunas líneas más de código, no es difícil hacer que la función devuelva y exporte un único DataFrame que contenga los datos de cada moneda en la lista.</p><p>Otra sugerencia es escribir una función <code>update</code> utilizando las mismas funcionalidades de Selenium que recibe un dataframe existente y actualizar los datos históricos a la fecha actual.</p><p>Además, la misma lógica utilizada para hacer scraping las monedas se puede utilizar para hacer scraping<em> </em>acciones, índices, materias primas, futuros y mucho más. Hay tantas páginas que puedes hacer scraping.</p><p>Sin embargo, si ese es el objetivo, entonces es importante insertar más pausas en el código para evitar sobrecargar el servidor. También debes aprovechar un proveedor de proxy, como <a href="https://infatica.io/">Infatica</a>, para asegurarte de que tu código seguirá funcionando mientras queden páginas por<em> </em>hacer scraping<em> </em>y que tú y tu conexión estén protegidos.</p><p>Finalmente, Selenium puede ser útil en varias otras situaciones, como iniciar sesión en sitios web, completar formularios, seleccionar elementos en una lista desplegable y mucho más. Por supuesto, no es la única solución para estos problemas, pero definitivamente puede ser útil según el caso de uso.</p><p>Espero que hayas disfrutado este artículo y te haya ayudado. Si tiene alguna pregunta o sugerencia, no dude en ponerse en <a href="https://www.linkedin.com/in/otavioss28/">contacto</a>.</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/otavio/">Otávio Simões Silveira</a> - </strong><a href="https://www.freecodecamp.org/news/how-to-code-a-scraping-bot-with-selenium-and-python/"><strong>How to Code a Scraping Bot with Selenium and Python</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ¿Para qué se utiliza Django de Python? 5 Razones claves por las que uso el Framework Django para Proyectos de Clientes ]]>
                </title>
                <description>
                    <![CDATA[ Si me hubieras dicho hace unos años que elegiría Django de Python como mi  framework de elección número uno para proyectos de clientes, no te habría creído. En ese entonces, prefería frameworks ligeros como Flask y Express por tu flexibilidad y el control extra que me ofrecieron. ¿Qué cambió? ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/para-que-se-utiliza-django-de-python-5-razones-claves-por-las-que-uso-el-framework-django-para-proyectos/</link>
                <guid isPermaLink="false">6084342e0aad9709126b4a2a</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Víctor Alcántara ]]>
                </dc:creator>
                <pubDate>Tue, 22 Jun 2021 05:06:50 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/altumcode-dC6Pb2JdAqs-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Si me hubieras dicho hace unos años que elegiría Django de Python como mi <strong>framework de elección número uno para proyectos de clientes</strong>, no te habría creído.</p><p>En ese entonces, prefería frameworks ligeros como Flask y Express por tu flexibilidad y el control extra que me ofrecieron.</p><p>¿Qué cambió?</p><p>¡Parte de ello fue que me contrataron para trabajar en Django! La otra parte era cansarse de configurar las mismas características una y otra vez desde cero para diferentes empresas: ORM para la base de datos, migraciones, sistemas de autenticación, correos electrónicos, etc. Lleva mucho tiempo configurar todas estas características y funcionar correctamente.</p><p>Bueno, Django me da todo esto con una configuración mínima fuera de la caja. Sí, es increíble.</p><p>Con Django, puedo crear aplicaciones mucho más rápidamente sin sacrificar características. La experiencia del desarrollador también es bastante buena, y no sólo porque Python es impresionante. También es porque hay buenas herramientas de depuración, sesiones ya está configurado y hay un servidor que se reinicia automáticamente con cada cambio en el código.</p><p>Podría seguir y seguir con todas las buenas características de Django, pero aquí voy a enumerar mi top 5. Espero que esto despierte tu interés para que quiera probar Django para sus propias empresas y proyectos.</p><h2 id="interfaz-de-administraci-n-de-django">Interfaz de administración de Django</h2><p>Estoy enumerando esto primero porque es mi característica favorita número uno que viene en Django.</p><p>Muchos clientes necesitan tener una vista en tu aplicación para poder administrar usuarios, datos o contenido en las páginas. Por lo general, el cliente no será técnico o tendrá tiempo suficiente para sumergirse en el código real y realizar cambios.</p><p>Entonces, ¿cuál es la mejor manera de manejar esta situación?</p><p>La interfaz de administración de Django es una gran solución. Sin ninguna configuración adicional, obtiene un área de administración potente, totalmente personalizable y protegida por inicio de sesión que muestra todos los datos de tu aplicación.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/02/Screen-Shot-2021-01-31-at-9.43.58-PM.png" class="kg-image" alt="Screen-Shot-2021-01-31-at-9.43.58-PM" width="600" height="400" loading="lazy"><figcaption>Image from <a href="https://stackoverflow.com/questions/37572343/django-count-todays-logged-in-users">Stack Overflow</a></figcaption></figure><p>Los datos de esta área de administración incluye cualquier tabla que quieres mostrar allí, así como todas las tablas de paquetes de terceros como bibliotecas de autenticación.</p><h2 id="django-tiene-una-autenticaci-n-incorporada">Django tiene una Autenticación incorporada</h2><p>Se necesita algún tipo de autenticación en casi todas las aplicaciones, por lo que el mercado tiene muchas herramientas, servicios y bibliotecas para usar. Debido a que hay tantas opciones, puede ser difícil elegir una. Incluso si utiliza un servicio administrado, conectarlo no siempre es fácil.</p><p>Bueno, Django viene con autenticación incorporada a través de sesiones. ¿Qué sucede si desea usar tokens? Simplemente instale la biblioteca de Django REST Framework (DRF) que viene con autenticación de token.</p><p>Personalmente me gusta usar DRF con la biblioteca adicional <a href="https://github.com/jazzband/dj-rest-auth">dj-rest-auth</a> para características extras como tokens que caducan. De cualquier manera, todas estas piezas funcionan perfectamente juntas en el ecosistema de Django y requieren muy poca configuración.</p><p><a href="https://github.com/freecodeschoolindy/student-management-system"><em>Este es un ejemplo de un repositorio de Django</em></a><em> donde tengo la configuración de autenticación de token (y autenticación de GitHub) en Django con Django REST Framework.</em></p><p>Cualquier sistema de autenticación que utilice en un proyecto de Django también utilizará ORM. Hablemos de algunos de los beneficios de eso a continuación.</p><h2 id="orm">ORM</h2><p>¿Alguna vez ha intentado configurar manualmente una ORM para conectar tu base de datos a tu aplicación? Por ejemplo, SQLAlchemy, TypeORM o Sequelize. Incluso con buena documentación, no es fácil. Tiene que conseguir diferentes tipos de consultas para trabajar, así como migraciones, seeding, y mucho más.</p><p>Django te proporciona todo eso fuera de la caja. Simplemente conecta las credenciales de tu base de datos favorita - Postgres, MySQL, Mongo, etc. - y Django se encarga del resto. Puede crear modelos e interactuar con ellos a través de la misma interfaz de Python sin importar la base de datos que elija.</p><p><em>Sólo una nota aquí: a menos que usted es un maestro de SQL o tiene un caso muy especial, tú debes estar usando un ORM para interactuar con bases de datos en cada aplicación.</em></p><p>Todas las características listadas hasta ahora no son exclusivas solo de Django de Python. La diferencia es que la mayoría de los frameworks le permiten configurar tu propio ORM, autenticación, etc. Django hace todo esto con muy poco esfuerzo. Esto significa que puede enviar características, MVPs y aplicaciones más rápidamente.</p><h2 id="velocidad-de-desarrollo">Velocidad de Desarrollo</h2><p>Python es un lenguaje que se utiliza comúnmente para crear prototipos y desarrollar aplicaciones rápidamente. Django le da la velocidad y la potencia de Python con muchas características integradas adicionales para ayudar a crear aplicaciones web y APIs mucho más rápido.</p><p>Tomar decisiones e investigar herramientas y bibliotecas lleva mucho tiempo en lugar de escribir código. Django tiene formas bien documentadas para hacer las cosas, lo que elimina todo el tiempo extra que podrías usar en averiguar una buena solución por ti mismo.</p><p>Desde el arranque un proyecto para ti, hasta crear consultas complejas y la implementación de su aplicación, Django lo tiene cubierto con una <a href="https://docs.djangoproject.com/en/3.1/">gran documentación</a> y <a href="https://forum.djangoproject.com/">una gran comunidad</a> para ayudarlo si se queda atascado.</p><p>Sin embargo, no son solo las bibliotecas principales de Django las que pueden ayudarlo a crear aplicaciones más rápidamente. Django también tiene miles de plugins con una API común para que pueda tener ciertas expectativas sobre cómo utilizar cualquiera de ellos en tu proyecto.</p><h2 id="django-plugins">Django Plugins</h2><p>¿Deseas crear un CMS? Django tiene un plugin para eso. En realidad, bastantes de ellos. Si buscas en Github y <a href="https://djangopackages.org/">DjangoPackages.org</a>, encontrarás una gran cantidad de soluciones para casi cualquier caso de uso.</p><p>Aquí algunos de mis favoritos:</p><ul><li><a href="https://www.django-rest-framework.org/">Django Rest Framework</a>: Routers, serializers, y otras harramientas para crear APIs simples.</li><li><a href="https://github.com/graphql-python/graphene-django">Django Graphene</a>: Facilita añadir la funcionalidad GraphQL a las aplicaciones de Django.</li><li><a href="https://wagtail.io/">Wagtail</a>: Añade una hermosa interfaz de estilo CMS a Django con un montón de características integradas para casos comunes de uso de CMS</li><li><a href="https://github.com/django-crispy-forms/django-crispy-forms">Django Crispy Forms</a>: Si está creando aplicaciones full-stack, este paquete hace que trabajar con formularios dentro de plantillas sea mucho más limpio y fácil.</li><li><a href="https://pypi.org/project/django-debug-toolbar/">Django Debug Toolbar</a>: Esto es necesario para los proyectos de Django. Puede depurar todo, desde consultas SQL hasta plantillas mediante esta herramienta.</li></ul><p>Espero haberte dado una prueba suficiente de Django para que lo pruebes por ti mismo. Déjame saber como te va :)</p><p>Trabajo con un gran equipo como un senior software developer en <a href="https://rocketbuild.com/">RocketBuild</a>! Construimos muchos proyectos interesantes en Django, React y otras tecnologías.</p><p>Si quieres ver más contenidos de Django, Python, and JavaScript, echa un vistazo a mi canal de YouTube, <a href="https://www.youtube.com/c/FaradayAcademy">Faraday Academy</a>. O mantente en contacto conmigo en Twitter, <a href="https://twitter.com/faradayacademy">@faradayacademy</a>.</p><p>Traducido del artículo de <strong><a href="https://www.freecodecamp.org/news/author/gwen/">Gwendolyn Faraday</a> - <a href="https://www.freecodecamp.org/news/10-reasons-to-try-django-for-client-projects/">What is Python's Django used for? 5 Key Reasons I Use the Django Framework for Client Projects</a></strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
