Python from Scratch - Crea un sitio web dinámico

Hemos cubierto un poco de Python en los tutoriales anteriores de esta sesión. Hoy, vamos a combinar todo lo que hemos aprendido hasta ahora para crear un sitio web dinámico con Python.


Prefiero un video tutorial?

Mira más videos tutoriales en YouTube.

Entonces, ¿cómo empezar a crear sitios web con Python? Bueno, puede hacerlo todo usted mismo y escribir un programa que se ejecute en un servidor web, aceptando solicitudes de página y ofreciendo respuestas en forma de HTML y otros recursos. Sin embargo, eso es mucho trabajo, así que ¿por qué molestarse cuando hay muchas herramientas disponibles para hacer el trabajo por usted? Estas herramientas se denominan marcos, y son las que usaremos hoy para crear nuestro sitio web.

Marcos de Python

Hay bastantes marcos web de Python, pero aquí están algunos de los mejores:

  • Django - Vamos a utilizar esto hoy. Tiene un gran conjunto de características, pero sigue siendo fácil de usar. La documentación también es excelente, así que si te quedas atascado, tendrás el tiempo más fácil para resolver tu problema con Django.
  • Grok - Otro marco con un conjunto de características que se acerca a Django. Si decides que no prefieres Django, esta es una buena alternativa..
  • WebPy - Un marco mucho más ligero. No tiene tantas características, aunque sí lo hizo Reddit durante un período de tiempo.!
  • TurboGears - Aunque anteriormente tenía una reputación de mala documentación, TurboGears ha mejorado sustancialmente en el último año.

Puede encontrar una lista más completa en el sitio web de Python si necesita opciones adicionales. Hoy vamos a configurar Django para el desarrollo en una máquina local, y luego construiremos un blog simple. También vamos a revisar el proceso de instalación en un servidor web remoto..


Instalando Django

Hoy realizaremos la mayor parte de nuestro trabajo en la Terminal. Todo esto debería funcionar en Mac y Linux; Sin embargo, si está ejecutando Windows, el proceso es algo diferente. Sin embargo, no es necesario estar familiarizado con la línea de comandos si solo estás escribiendo Python, si estás planeando usar Django o ejecutar un sitio web dinámico en general, vale la pena aprender..

Tutoriales de terminal

Considera revisar estos tutoriales para ponerte en marcha con la Terminal.

  • Una introducción al trabajo en la terminal, que también cubre a Git y Github..
  • 10 consejos para trabajar más rápido en la terminal..

Aquí están los comandos que necesitas para instalar Django. No es compatible con Python 3, por lo que deberá instalar la versión 2.7 o anterior para que funcione..

 wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 python setup.py instalar

A continuación, opcionalmente podemos eliminar los archivos de instalación..

 cd… rm Django-1.3.1.tar.gz

¡Deberias hacer eso! Vamos a probarlo.

 python desde django import get_version get_version ()

Debería ver '1.3.1'. Si lo haces, todo funcionó y Django está instalado en tu sistema. ¡Felicidades! Estamos listos para comenzar a crear nuestro sitio.!


Construyendo nuestro Blog

Vamos a construir un sistema de blog hoy, porque es una excelente manera de aprender lo básico. Primero, necesitamos crear un proyecto Django..

cd ~ / Documents / Projects django-admin.py startproject FirstBlog cd FirstBlog ls

¿Qué hace cada uno de estos archivos??

  • __init__.py le dice a Python que esta carpeta es un paquete de Python. Aprendimos sobre esto en la tercera lección; permite a Python importar todos los scripts en la carpeta como módulos.
  • manage.py no es realmente parte de su sitio web; es un script de utilidad que se ejecuta desde la línea de comandos. Contiene una serie de funciones para administrar su sitio..
  • settings.py contiene la configuración de su sitio web. Django no usa archivos XML para la configuración; Todo es Python. Este archivo es simplemente una serie de variables que definen la configuración de su sitio..
  • urls.py es el archivo que mapea URLs a páginas. Por ejemplo, podría mapear yourwebsite.com/about a una Sobre nosotros página.

Django se refiere a sí mismo como un marco de MTV, que significa Vista de plantilla de modelo.

Aplicaciones

Sin embargo, ninguno de estos archivos, por sí mismos, hace un sitio web funcional. Para eso, necesitamos apps. Las aplicaciones son donde se escribe el código que hace que funcione su sitio web, pero antes de que las examinemos, debemos comprender un poco los principios de diseño de Django..

Primero, Django es un framework MVC, que significa Model View Controller. Django se refiere a sí mismo como un marco de MTV, que significa Vista de plantilla de modelo. Es un enfoque ligeramente diferente al MVC, pero fundamentalmente, son bastante similares. De todos modos, MVC es un patrón arquitectónico que proporciona un método para estructurar sus proyectos. Separa el código que se usa para procesar los datos del código que administra la interfaz de usuario.

Django se suscribe a la filosofía DRY o "Don't Repeat Yourself".

En segundo lugar, Django se suscribe a la filosofía DRY o Don't Repeat Yourself, lo que significa que nunca debe escribir código que realice una determinada tarea más de una vez. Por ejemplo, en nuestro blog, si escribiéramos una función que seleccionara un artículo aleatorio del archivo e implementáramos esta función en varias páginas, no lo codificaríamos nuevamente cada vez que fuera necesario. Lo codificamos una vez y luego lo usamos en cada página..

Entonces, ¿cómo se relaciona esto con las aplicaciones? Bueno, las aplicaciones te permiten escribir tu sitio web en un estilo DRY. Cada proyecto, como el que tenemos aquí, puede contener múltiples aplicaciones. Por el contrario, cada aplicación puede ser parte de múltiples proyectos. Usando el ejemplo anterior, esto significa que si hiciéramos otro sitio en el futuro que también necesitara una función de página aleatoria, no tendríamos que escribirlo todo de nuevo. Podríamos simplemente importar la aplicación de este proyecto. Debido a esto, es importante que cada aplicación tenga un propósito distinto. Si escribe toda la funcionalidad de su sitio dentro de una aplicación y luego necesita usar parte de ella más tarde, debe importarla toda. Si estuviera creando un sitio web de comercio electrónico, por ejemplo, no querría importar todas las características del blog. Sin embargo, si crea una aplicación para la función aleatoria y una aplicación para el sistema de publicación de blogs, puede seleccionar y elegir los bits que necesita.

Esto también significa que dentro del sitio, el código está bien organizado. Si desea modificar una función, no tiene que buscar en un archivo masivo; en su lugar, puede buscar la aplicación correspondiente y cambiarla sin preocuparse por interferir con otra cosa..

python mangage.py startapp blog cd blog ls

Una vez más, tenemos un __init__.py Archivo para convertirlo en un paquete, y otros tres archivos: modelos, pruebas y vistas. No tenemos que preocuparnos por las pruebas por ahora, pero las otras dos son importantes. Modelos y vistas son los METRO y V partes de MVC.

En modelos, definimos nuestras estructuras de datos..

Si alguna vez ha trabajado con PHP antes, podría haber usado PhpMyAdmin para crear sus tablas MySQL y luego haber escrito sus consultas SQL manualmente en sus scripts PHP. En Django, es mucho más fácil. Definimos todas las estructuras de datos que necesitamos en este archivo de modelos, luego ejecutamos un comando y todas las bases de datos necesarias están hechas para nosotros.

Cuando desea acceder a esos datos, puede utilizar estos modelos a través de estos modelos, en lugar de ejecutar consultas en bruto. Esto es muy útil, porque Django puede usar varios programas de base de datos. Vamos a usar MySQL hoy, porque es el más poderoso y es lo que ofrecen la mayoría de los hosts, pero si necesitamos cambiar a una base de datos diferente en el futuro, ¡todo el código seguirá siendo válido! En otros idiomas, si desea cambiar a SQLite o algo similar, deberá volver a escribir el código que accede a su base de datos..

En el archivo de vistas, escribimos el código que genera las páginas web. Esto une todas las otras partes juntas. Cuando un usuario escribe una URL, es enviado por el urls guión que vimos anteriormente a la puntos de vista El script, que luego obtiene los datos relevantes de los modelos, lo procesa y lo pasa a una plantilla, que finalmente se presenta como la página que el usuario ve. Vamos a echar un vistazo a esas plantillas en breve. Son la parte más fácil - en su mayoría HTML.

Para un blog, necesitaremos una tabla de publicaciones, con varios campos para el título, el texto del cuerpo, el autor, la hora en que se escribió, etc. Un blog real tendría comentarios, pero eso está más allá del alcance de la demostración de hoy..

desde django.db importar modelos clase posts (models.Model): author = models.CharField (max_length = 30) title = models.CharField (max_length = 100) bodytext = models.TextField () timestamp = models.DateTimeField ()

MySQL

Estos modelos son solo una descripción. Necesitamos hacer una base de datos real de ellos. Primero, sin embargo, necesitamos que se ejecute MySQL en nuestro sistema. En un servidor web real, esto no sería un problema, ya que generalmente lo tienen preinstalado. Por suerte, con un gestor de paquetes, es fácil de instalar. Primero, necesitas instalar Homebrew y Easy Install

brew install mysql easy_install mysql-python mysqld_safe --skip-grant-tables #todos tienen permisos completos mysql -u root ACTUALIZACIÓN mysql.user SET Password = PASSWORD ('nettuts') WHERE User = "root"; # le da al usuario 'root' una contraseña FLUSH PRIVILEGES; mysql -u root -p # inicia sesión con nuestra contraseña 'nettuts' CREATE DATABASE firstblog; salir de python2.6 manage.py runserver

Cuando reinicies, MySQL no se ejecutará, por lo que cada vez que necesites hacer esto en el futuro, ejecuta mysqld para iniciar el servidor. A continuación, puede ejecutar python2.6 manange.py runserver en una nueva pestaña para iniciar el servidor de desarrollo.

Este comando no ejecutará el servidor todavía, solo devolverá un error. Eso es porque necesitamos configurar nuestras configuraciones. Echemos un vistazo a settings.py.

Necesitas cambiar la configuración de la base de datos primero. Estos comienzan en la línea doce..

BASES DE DATOS = 'default': 'ENGINE': 'django.db.backends.mysql', # Agregar 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'firstblog', # o ruta al archivo de base de datos si usa sqlite3. 'USER': 'root', # No se usa con sqlite3. 'PASSWORD': 'nettuts', # No se usa con sqlite3. 'HOST': ", # Establecer en cadena vacía para localhost. No se usa con sqlite3. 'PORT':", # Establecer en cadena vacía para el valor predeterminado. No se utiliza con sqlite3. 

Si intenta ejecutar el servidor nuevamente, debería funcionar, siempre que haya instalado MySQL correctamente. Si tú visitas 127.0.0.1:8000 en su navegador web, debería ver la página predeterminada de Django.

Ahora vamos a convertir nuestro sitio Django en un blog. Primero, necesitamos usar nuestros modelos para crear tablas en la base de datos ejecutando el siguiente comando:

python2.6 manage.py syncdb

Cada vez que cambie sus modelos, debe ejecutar este comando para actualizar la base de datos. Tenga en cuenta que esto no puede alterar los campos existentes; Sólo puede agregar nuevos. Entonces, si quieres eliminar campos, tendrás que hacerlo manualmente con algo como PhpMyAdmin. Debido a que esta es la primera vez que ejecutamos el comando, Django configurará todas las tablas integradas predeterminadas para cosas como el sistema de administración. Simplemente escriba 'sí' y luego complete sus datos.

Ahora vamos a configurar el urls.py expediente. Descomente la primera línea en la sección de ejemplos y cámbiela para decir url (r '^ $', 'FirstBlog.blog.views.home', name = "home") .

Ahora, vamos a crear el archivo de vistas para responder a estas solicitudes.

desde django.shortcuts importar render_to_response desde blog.models importar entradas def home (solicitud): devolver render_to_response ('index.html')

Plantillas

Esta index.html El archivo no existe todavía, así que hagámoslo. Crea una carpeta, llamada plantillas en la Blog Aplicación y guardar un archivo en el llamado index.html, que puede contener simplemente "Hello World" por ahora. Luego, debemos editar el archivo de configuración para que Django sepa dónde se encuentra esta plantilla.

La línea 105 es donde comienza la sección para declarar carpetas de plantillas; así que ajústalo, así:

TEMPLATE_DIRS = ("blog / templates", # Ponga cadenas aquí, como "/ home / html / django_templates" o "C: / www / django / templates". # Siempre use barras diagonales, incluso en Windows. # No olvide usar rutas absolutas, no rutas relativas.)

Si vuelve a ejecutar el servidor y actualiza la página en su navegador, debería ver el mensaje "Hola mundo". Ahora podemos empezar a diseñar nuestro blog. Agregaremos algo de código HTML para la página de inicio..

      Primer blog   

Primer blog

Título

Publicado en fecha por autor

Cuerpo de texto

Si guarda y actualiza la página, debería ver que la página se ha actualizado con este nuevo contenido. El siguiente paso es agregar contenido dinámico desde la base de datos. Para lograr esto, Django tiene un lenguaje de plantillas que le permite incrustar variables con llaves. Cambia la sección central de tu página para que se vea así:

Primer blog

title

Publicado en fecha por autor

cuerpo

Entonces podemos pasar valores a estos marcadores de posición variables desde el vistas.py archivo creando un diccionario de valores.

from django.shortcuts import render_to_response from blog.models import posts def home (solicitud): content = 'title': 'My First Post', 'author': 'Giles', 'date': '18th September 2011', ' body ':' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam cursus tempus dui, ut vulputate nisl eleifend eget. Aenean justo felis, dapibus quis vulputate en, porta et dolor. Praesent enim libero, malesuada nec vestibulum vitae, fermentum nec ligula. Etiam eget convallis turpis. Donec non sem justo. ', Devolver render_to_response (' index.html ', contenido)

Guarde y actualice, y debería ver que ahora está pasando el contenido a una plantilla desde su archivo de vistas. El paso final es obtener datos de nuestra base de datos y pasarlos en su lugar. Afortunadamente, podemos hacer todo esto sin consultas SQL, utilizando los modelos de Django. Necesitamos añadir nuestro Blog aplicación a nuestro FirstBlog proyecto cambiando otra configuración. Ir INSTALLED_APPS en la línea 112, y agregue el

'FirstBlog.blog',

a la lista.

Entonces cambia vistas.py por lo que agrega datos de la base de datos.

from django.shortcuts import render_to_response from blog.models import posts def home (solicitud): entries = posts.objects.all () [: 10] return render_to_response ('index.html', 'posts': entries)

A continuación, actualice la plantilla para acceder a estos datos..

Primer blog


% para publicaciones en publicaciones%

título de la entrada

Publicado en post.timestamp por post.author

post.bodytext


% endfor%

Aquí, podemos acceder a todos los datos en nuestra tabla en el vistas.py archivo, a continuación, seleccione sólo las diez primeras entradas. Pasamos estos datos a la plantilla, recorramos las entradas y mostramos los datos con el HTML de nuestro sitio. Esto no funcionará todavía, porque no hay nada en la base de datos. Detenga el servidor y ejecute:

python2.6 manage.py syncdb

Esto agregará la nueva tabla para nuestras publicaciones en la base de datos. Luego, abre una nueva pestaña y escribe:

mysql -u root -p

... escribe tu contraseña, pulsa enter y ejecuta:

INSERTAR EN blog_posts (autor, título, texto corporal) valores ('Bob', 'Hola mundo', 'Lorem Ipsum');

Regrese a la pestaña anterior y ejecute el servidor nuevamente. Actualice la página y debería ver una publicación de blog con el contenido ficticio que acaba de agregar. Si ejecuta el comando MySQL un par de veces más, debería ver más publicaciones aparecer en la página cuando actualice.

Sistema de administración de Django

Lo último que debemos hacer hoy es revisar el sistema de administración de Django. Esta es una característica realmente poderosa de Django que le permite administrar su sitio sin escribir más códigos, como lo haría si estuviera creando un sitio desde cero. Para habilitarlo, necesitamos cambiar algunas configuraciones. Primero, descomenta las líneas 4, 5, 13 y 16 dentro de urls.py, para que realmente pueda acceder a la página de administración. A continuación, vaya a la INSTALLED_APPS Sección de settings.py y descomentar 'django.contrib.admin', y 'django.contrib.admindocs',. Para permitir que el administrador controle su puestos tabla, crea un nuevo archivo llamado admin.py en el Blog carpeta, y añadir las siguientes líneas:

desde django.contrib importar administrador desde blog.models importar publicaciones admin.site.register (publicaciones)

correr python2.6 manage.py syncdb de nuevo para agregar las tablas para la sección de administración y reiniciar el servidor.

Si tú visitas 127.0.0.1:8000/admin ahora en su navegador, debería ver una página de inicio de sesión. Use los detalles que eligió antes cuando ejecutó la syncdb comando para iniciar sesión. Debería ver una sección, llamada Blog, con un subtítulo para el puestos mesa. Puede usar esto para crear, editar y eliminar publicaciones de blog con una interfaz simple.

Eso es todo lo que hay que hacer. Acaba de crear un blog completamente funcional, aunque simple. Para terminar esta lección, veremos cómo instalar Django en un servidor web.


Instalación en un servidor web

Hay dos tipos de alojamiento web, y el que tengas afectará si puedes usar Django. Si ha compartido alojamiento, está completamente a merced de su anfitrión..

Muchos servidores web baratos no soportan Python. Si bien PHP está casi garantizado, el soporte para otros idiomas a menudo no lo está. Tendrás que revisar el panel de control para determinar si Python (y Django) están disponibles. Obviamente el proceso es ligeramente diferente con cada host. Casi todo el alojamiento se ejecuta en Apache, y podemos usarlo para alojar Django, usando el mod_wsgi o mod_python Módulos apache.

La mayoría de los hosts web ejecutan scripts en varios idiomas utilizando CGI. Django puede ejecutarse en FastCGI, y también, teóricamente, en CGI, pero esto no tiene soporte oficial y sería demasiado lento para un sitio web de producción real. Tendrás que comprobar si están instalados. Por lo general, se encuentran debajo de un encabezado, como "CGI y Scripting Language Support".

Si tiene VPS hosting, o tiene la suerte de tener un servidor dedicado, su vida es mucho más fácil. Por lo general, estos vienen con Python preinstalado, y desde allí, solo necesitas seguir los mismos pasos que realizamos para obtener una copia local de Django en ejecución. Si no tiene Python, puede instalarlo con un administrador de paquetes. Tu sistema incluso puede venir con Django.

ssh [email protected] wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 python setup.py install

Una vez que haya instalado Django en su servidor, cargue el sitio que acaba de crear con cualquier cliente de transferencia de archivos. Puede colocar los archivos en cualquier lugar, pero manténgalos fuera del público o cualquier persona podrá ver el código fuente de su sitio. yo suelo /casa para todos mis proyectos.

A continuación, cree una base de datos MySQL, llamada 'primer blog' en su servidor y ejecute syncdb otra vez. Tendrá que volver a crear su cuenta para el panel de control de administración, pero esto es algo que solo ocurre una vez..

Si intenta y ejecuta esto, puede recibir un error, y eso se debe a que la configuración del servidor es diferente a la de su computadora local. Es posible que deba cambiar la contraseña de la base de datos dentro de settings.py, pero dependiendo de la configuración de su servidor, también puede encontrar otros problemas. Google es tu amigo en estas situaciones.!

Para ejecutar el servidor esta vez, el comando es ligeramente diferente. Debe especificar una dirección IP y un puerto para poder acceder al sitio a través de Internet.

python manage.py runserver 0.0.0.0:8000

Si visita su sitio en un navegador web, en el puerto 8000, debería ver su sitio!


Conclusión

Eso es todo para esta lección ... y nuestra serie. Espero que hayas aprendido una serie de habilidades útiles en estas últimas cinco lecciones, y que estés listo para continuar y aprender aún más Python en el futuro. Si le gusta el aspecto de Django y desea continuar aumentando su conocimiento del marco, aquí hay algunos tutoriales adicionales sobre el tema..

  • Buceando en django
  • Hacer una lista de tareas
  • 10 consejos útiles de Django

Como siempre, me complace discutir cualquier pregunta sobre este tutorial o sobre Python en general en los comentarios. Gracias por leer.

Aprender Python

Aprende Python con nuestra completa guía de tutoriales de Python, ya sea que estés empezando o seas un programador experimentado que busca aprender nuevas habilidades..