Django es un framework de desarrollo web escrito en Python, este sigue el patrón de diseño modelo–vista–template (MVT), sus principales caracterÃsticas son simplicidad, flexibilidad, fiabilidad y escalabilidad. Django proporciona todos los mecanismos necesarios para la programación web de un sitio, acceso a bases de datos, traducciones, lenguaje de templates entre otras caracterÃsticas. Además este proporciona de forma automática un interrfaz de administración de contenidos, esta permite la creación, actualización y eliminación de objetos, llevando un registro de todas las acciones realizadas y proporciona una interfaz para administrar los usuarios y los grupos de usuarios.
Para ilustrar todo el proceso de desarrollo web en Django vamos a crear un proyecto llamado rxWodProject, se trata de una aplicación de planificación de rutinas de entrenamiento.
Esta utilizará PostgreSQL como base de datos, podrÃamos empezar utilizando SQLite si lo deseamos pero la posterior migración de datos puede llegar a resultar traumática.
Consultamos las versiones disponibles en los repositorios de FreeBSD:
postgresql10-server-10.15 PostgreSQL is the most advanced open-source database available anywhere
postgresql11-server-11.10 PostgreSQL is the most advanced open-source database available anywhere
postgresql12-server-12.5 PostgreSQL is the most advanced open-source database available anywhere
postgresql13-server-13.1_1 PostgreSQL is the most advanced open-source database available anywhere
postgresql95-server-9.5.24 PostgreSQL is the most advanced open-source database available anywhere
postgresql96-server-9.6.20 PostgreSQL is the most advanced open-source database available anywhere
Instalamos la versión deseada:
Añadimos PostgreSQL al arranque:
Inicializamos la base de datos:
Arrancamos el servicio:
Por defecto PostgreSQL utiliza el esquema de autenticación “peer authentication” para las conexiones locales, basicamente significa que si el nombre de un usuario del SO coincide con el nombre de un usuario de PostgreSQL este usuario puede acceder a la cli de PostgreSQL sin autenticación.
psql
Creamos el usuario de acceso de la aplicación web:
CREATE USER rxwod_user WITH PASSWORD 'PASSWORD';
ALTER ROLE rxwod_user SET client_encoding TO 'utf8';
ALTER ROLE rxwod_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE rxwod_user SET timezone TO 'UTC+1';
Creamos la base de datos indicando el propietario:
CREATE DATABASE rxwod WITH OWNER rxwod_user;
Listamos las bases de datos:
\l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+---------+---------+-----------------------
postgres | postgres | UTF8 | C | C.UTF-8 |
rxwod | rxwod_user | UTF8 | C | C.UTF-8 |
template0 | postgres | UTF8 | C | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
Asignamos los permisos necesarios y salimos:
GRANT ALL PRIVILEGES ON DATABASE rxwod TO rxwod_user;
\q
exit
Comprobamos el acceso:
rxwod=> \conninfo
You are connected to database "rxwod" as user "rxwod_user" via socket in "/tmp" at port "5432".
Instalamos Python y las dependencias básicas:
Generamos el entorno virtual desde la cuenta de un usuario regular, si no estás familiarizado con los entornos virtuales de Python te recomiendo
este artÃculo
:
Activamos el entorno virtual:
source bin/activate
Mientras permanezcamos en el Venv aparecerá un prompt diferente:
(rxWod) Garrus $ ~/rxWod>
Voy a omitir dicho prompt para que sea mas sencillo copiar y pegar los comandos del manual.
Instalamos Django, SQLite y psycopg2 dentro del entorno virtual:
Si tenemos una versión desactualizada de pip puede que nos pida actualizarla:
WARNING: You are using pip version 20.1.1; however, version 21.0.1 is available.
You should consider upgrading via the ‘/usr/home/kr0m/rxWod/bin/python3.7 -m pip install –upgrade pip’ command.
Actualizamos:
El comando pip freeze nos muestra las versiones de las librerias instaladas actualmente:
asgiref==3.3.1
Django==3.1.7
psycopg2==2.8.6
pytz==2021.1
sqlite3==0.0.0
sqlparse==0.4.1
Tkinter==0.0.0
Comprobamos que tengamos Django instalado:
>>> import django
>>> print(django.get_version())
3.1.7
>>> quit()
Creamos el proyecto:
Nos habrá generado la siguiente estructura de directorios:
|-- manage.py
`-- rxWodProject
  |-- __init__.py
  |-- asgi.py
  |-- settings.py
  |-- urls.py
  `-- wsgi.py
Generamos el fichero requirements en base a las versiones instaladas de este modo si alguien clona nuestro repositorio tan solo deberá instalar las dependencias con: pip install -r requirements.txt
pip freeze > requirements.txt
Comprobamos que funcione el proyecto:
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 28, 2021 - 12:27:04
Django version 3.1.7, using settings 'rxWodProject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Por ahora podemos ignorar la advertencia sobre migraciones pendientes en la base de datos.
Debemos tener en cuenta que este servidor es solo para uso en fase de pruebas, en la web de Django insisten e insisten en que no se utilice como servidor en producción:
Don’t use this server in anything resembling a production environment. It’s intended only for use while developing. (We’re in the business of making Web frameworks, not Web servers.)
Accedemos a la app vÃa web:
http://127.0.0.1:8000/
En este artÃculo tan solo hemos arañado la superficie ya que solo hemos dejado preparada la base de datos para su posterior uso, creado en entorno virtual y creado el proyecto de Django, en posteriores artÃculos crearemos una app dentro del proyecto e indagaremos sobre la gestión de la base de datos.