domingo, septiembre 22, 2019

Django for dummies y algo de Python

Para no perder la costumbre este año me puse como objetivo dominar Python  y Django, hice el curso de Microsoft que se encuentra en línea aparte de otro presencial en BIOS. El problema que tengo es que me esta costando agarrar práctica y en ocasiones me complico con cosas muy simples, por este motivo voy a ir poniendo todo lo que me ha complicado en el arranque con Django. La idea es que si recién arrancas no te tranques en las cosas simples que me he trancado.

¿Como detectar la versión de django?

Es algo muy sencillo pero en mi caso me estuve complicando hasta que encontré la forma mas sencilla, abrí una terminal ejecute python hice el import de django y luego django.VERSION. Al ejecutar esto me da el siguiente resultado:

cgomez@cgomez-urulinux ~ $ python
Python 2.7.12 (default, Aug 22 2019, 16:36:40)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 11, 23, u'final', 0)
>>> 

En mi caso tengo Python 2.7 y 3.5 por lo que probé y funciona de la misma manera. Es algo sencillo pero que me llevo navegar un poco en internet para darme cuenta de esto.

cgomez@cgomez-urulinux ~ $ python3
Python 3.5.2 (default, Jul 10 2019, 11:58:48)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(2, 2, 0, 'final', 0)
>>>
Al hacer la consulta con Python 3 me da que tengo otra versión de Django, esto por que lo tengo así configurado y uso la versión que necesito según lo que quiera hacer.

¿Por qué ejecutar el manage.py migrate?
Ten en cuenta que no soy experto en esto pero en resumen cuando comienzas un nuevo proyecto se debe ejecutar el comando manage.py migrate para que se cree la base por defecto con las estructuras necesarias para django. Esto no es obligatorio pero si usas por ejemplo SQLite como base de datos al ejecutar el comando se crean las tablas necesarias para las aplicaciones definidas en INSTALLED_APPS, esto lo puedes ver en el archivo settings.py. Con SQLite lo hace con la primera ejecución si no me equivoco pero en mi caso lo hago para no olvidarme. Aquí un ejemplo de ejecutar este comando:
cgomez@cgomez-urulinux ~/djangocode/misitio $ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
cgomez@cgomez-urulinux ~/djangocode/misitio $ ls -l
total 48
-rw-r--r-- 1 cgomez cgomez 40960 sep 22 20:23 db.sqlite3
-rwxrwxr-x 1 cgomez cgomez 627 sep 22 20:10 manage.py
drwxrwxr-x 3 cgomez cgomez 4096 sep 22 20:14 misitio
cgomez@cgomez-urulinux ~/djangocode/misitio $
En el ejemplo se crea la bae db.sqlite3 ya que es la base que viene por defecto en la configuración y al ejecutar el migrate se crea con las estructuras necesarias para las aplicaciones que vienen por defecto.

¿Servidor de Desarrollo?
Para que no te tengas que complicar con Apache ni nada por el estilo django cuenta con un servidor de desarrollo que es sencillo y lo puedes ejecutar solo con una línea.

cgomez@cgomez-urulinux ~/djangocode/misitio $ python3 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 22, 2019 - 23:39:41
Django version 2.2, using settings 'misitio.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Con runserver se ejecuta un servidor liviano para desarrollo que escucha en el puerto 8000 por defecto por lo que puedes ejecutar esto en tu equipo y luego entrar al browser de la siguiente manera:



Si necesitas cambiar el puerto en el que escucha el servidor de desarrollo se lo puedes pasar como parámetro al ejecutarlo, también puedes hacer que escuche en la ip pública del equipo para compartir esta ejecución con otro desarrollador.

cgomez@cgomez-urulinux ~/djangocode/misitio $ python3 manage.py runserver 8081
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 22, 2019 - 23:47:20
Django version 2.2, using settings 'misitio.settings'
Starting development server at http://127.0.0.1:8081/
Quit the server with CONTROL-C.

En el ejemplo mi servidor de desarrollo escucha en el puerto 8081, también puedo hacer lo siguiente:

cgomez@cgomez-urulinux ~/djangocode/misitio $ python3 manage.py runserver 192.168.1.6:8081
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 22, 2019 - 23:49:54
Django version 2.2, using settings 'misitio.settings'
Starting development server at http://192.168.1.6:8081/
Quit the server with CONTROL-C.

En este ejemplo queda accesible mi servidor para que desde otro equipo lo puedan acceder, siempre y cuando tengan acceso al ip 192.168.1.6 en el puerto 8081. Estoy descartando temas de firewall y seguridad ya que el ejemplo es solo ilustrativo.