sábado, 19 de noviembre de 2022

1.- Django - Instalación y Primera Página.


¿Que es Django?

De forma muy resumida podemos decir que es un "framework" de Python para crear entornos web. 


1) Instalación.

Se puede instalar en local o también, que suele ser lo normal, en un entorno virtual. Todos los ejemplos que siguen están realizados en un entorno virtual.

Para instalarlo vamos a su página y buscamos la sección de descargas. Ni que decir tiene que tienes que tener Python instalado en tu ordenador para poder ejecutar Django. Personalmente como estoy en Linux, lo voy a instalar con: 

$ sudo pip3 install Django

o también,  a fecha en la que he escrito esta entrada, la última versión con:

pip install Django==4.1.3

Para ver si esta correctamente instalado, entramos en la consola de Python y tecleamos:

(miEntorno) chema@lenovo:~/Cursos/DJANGO$ python
Python 3.10.6 (main, Nov  2 2022, 18:53:38) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(4, 1, 3, 'final', 0)


2) Creación de un proyecto.

Un Proyecto se organiza como un grupo de aplicaciones individuales que trabajan juntas para que el proyecto funcione como un todo.

Empezaremos creando una carpeta donde guardar el proyecto (DJANGO en mi caso). Entramos en ella y desde el terminal, podemos hacerlo de dos formas:

a) $ django-admin startproject Nombre_Proyecto

(como nombre de proyecto escogí Proyecto1)

Se creará una carpeta con el nombre que le hayamos puesto al proyecto y si entramos en ella veremos el siguiente esquema de directorio:

Proyecto1



o

b) $ django-admin startproject Nombre_Proyecto .

Importante el punto final. La diferencia está en que de esta forma se nos crea el proyecto con forma de directorio para que sea más fácil desplegarlo. Quedaría así:

Proyecto1


Cuestión de gustos o funcionalidad el elegir una y otra. (el directorio miEntorno es el entorno virtual que he creado, no se instala con Django).

El archivo manage.py es muy importante porque nos permite interactuar con los proyectos Django de varias formas. Si vamos a la consulta y ejecutamos:

$ ./manage.py help o bien python manage.py help

Nos ofrece una salida con todas las instrucciones y comandos que puede ejecutar. (entre ellos el parámetro startproject ya visto)

(miEntorno) chema@lenovo:~/Cursos/DJANGO$ ./manage.py help

Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]
    changepassword
    createsuperuser

[contenttypes]
    remove_stale_contenttypes

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    optimizemigration
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver

[sessions]
    clearsessions

[staticfiles]
    collectstatic
    findstatic
    runserver


Dentro de la carpeta del proyecto creada tenemos otros archivos que son:

__init__.py 

Es un archivo necesario para que Python trate el directorio del proyecto - Proyecto1 en el ejemplo - como un paquete.

settings.py 

Contiene, como te puedes imaginar por el nombre, todas las configuraciones de nuestro proyecto de Django.

urls.py

Es donde se almacenan las urls o direcciones de nuestro proyecto.

wsgi.py

Es el servidor web que vamos a utilizat en el proyecto de Django.


3) Creación de la Base de Datos del Proyecto.


Para que el proyecto se ponga en funcionamiento tenemos que crear una base de datos. Por defecto Django utiliza Sqlite3, aunque como veremos más tarde también soporta oficialmente PostgreSql, MySql o Oracle. Con desarrollos de terceros también es posible utilizar Sql server, Sap Sql, db2, Firebird etc.

Para empezar vamos a crear la que se utiliza por defecto Sqlite3, con el siguiente comando:

$ python manage.py migrate

>>> (miEntorno) chema@lenovo:~/Cursos/DJANGO$ python 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 auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK


Dentro de la carpeta Principal se habrá generado un archivo db.sqlite3.

base de datos sqlite3


El proyecto ya está listo para funcionar. Para ver que todo va bien tenemos que ejecutar un servidor web y usar el navegador para ver la página de bienvenida de Django. El servidor web que viene con Django es útil para probar nuestro proyecto pero NO para ponerlo en producción, sirve para ver si nuestros proyectos funcionan y se ven.


$ python manage.py runserver


>>> (miEntorno) chema@lenovo:~/Cursos/DJANGO$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
November 09, 2022 - 17:13:08
Django version 4.1.3, using settings 'proyecto1.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Ahora si abres el navegador web que utilices y vas a la dirección:


http://127.0.0.1:8000/

o

http://localhost:8000/

podrás ver, si esta todo instalado correctamente la página de bienvenida de Django:

Pagina de instalación correcta de Django

Vamos a personalizar algunos elementos de Django como son la hora local y el idioma. Por defecto la aplicación utiliza por defecto el idioma ingles y como hora local UTC (Coordinated Universal Time) que en verano es dos horas menos que la nuestra. (si estás en España)

Para cambiarlo busca el archivo settings.py y busca los siguientes valores:

...
# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True
...

Puedes usar el idioma y tu hora local, pero si quieres usar el Castellano y poner la hora de España cambia los siguientes valores:

LANGUAGE_CODE = 'es-es'

TIME_ZONE = 'Europe/Madrid'

4) Creación de una página web sencilla "Hola Mundo".

Lo primero que tenemos que hacer es crear un archivo nuevo que va a almacenar las diferentes vistas que vayamos almacenando. Este archivo, por convención, se suele llamar views.py. Estará dentro de la carpeta que contiene los demás, donde está el __init__.py.

Lo primero que tenemos que hacer es importar:

views.py

# Importar el módulo
from django.http import HttpResponse

# El nombre de la primera vista será Saludo
def saludo(request):
    return HttpResponse("Hola Mundo")

A cada función que creemos dentro de views.py se le denomina vista.

Ahora debemos decirle a Python cual es la Url que debemos introducir en el navegador para que nos de esta vista.

Esto se lo decimos en el archivo urls.py. En el mismo, al abrirlo, ya vienen las instrucciones de como construirla. Tiene que tener la siguiente estructura:

path("nombreurl/", nombre_de_la_vista)

nombreurl/ -> podemos poner el que nosotros queramos, pero por coherencia debería coincidir con el nombre de la función. (Hay que poner la barra al final).

nombre de la vista -> el mismo que pusimos en el archivo views.py

y como la función está en un archivo diferente al que nos encontramos hay que importarla:

from nombre_proyecto.views import nombre_de_la_vista

nombre_proyecto será el nombre de la carpeta que lo contiene:

En mi ejemplo: (en negrita está lo que se ha añadido de nuevo al archivo)

from django.contrib import admin
from django.urls import path
from Proyecto1.views import saludo

urlpatterns = [
    path('admin/', admin.site.urls),
    path('saludo/', saludo),
]

Si ejecutamos de nuevo el servidor de Django:

$ python manage.py runserver

y vamos a la siguiente Url: localhost:8000/saludo/

debemos ver lo siguiente:

hola mundo en Django


lunes, 7 de noviembre de 2022

Creación de Ejecutables de una aplicación en Python.

El ejecutable tomará la forma del sistema operativo con el que estemos trabajando. Si lo estas haciendo en Windows será un archivo con terminación .exe, si estas en Linux un archivo ejecutable sin terminación o con terminación .tar.gz y .dmg si estás en Mac.

Para crear el ejecutable voy a utilizar el siguiente código:

https://github.com/chema-hg/SISTEMA_SOLAR

Es una simulación del sistema solar que utiliza la biblioteca Pygame para funcionar, con lo que si no la tienes instalada deberías instalarla previamente. Yo creare un directorio, crearé en el un entorno virtual. Después copiaré aquí el programa, activaré el entorno virtual e instalaré en el la librería Pygame.

Vamos a utilizar para crear el ejecutable la biblioteca Pyinstaller.  Por tanto hay que instalarlo. Existen otros programas similares como, Py2exe, cx_Freeze. Para Mac también está py2app.

Lo primero comentar que si quieres crear un ejecutable para Windows tienes que instalarlo y usarlo en Windows y lo mismo para Linux o Mac, ya que este programa en concreto no compila la versión para otra plataforma. Yo estoy trabajando en Linux así que crearé un ejecutable para Linux.


>>> mkdir Ejecutable
>>> cd Ejecutable/ # Aquí, copia dentro de este directorio la aplicación.
>>> python3 -m venv Mientorno
>>> source ./Mientorno/bin/activate
(Mientorno) >>> pip install pygame
Collecting pygame
  Using cached pygame-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB)
Installing collected packages: pygame
Successfully installed pygame-2.1.2

(Mientorno) >>> pip install pyinstaller
Collecting pyinstaller
  Downloading pyinstaller-5.6.2-py3-none-manylinux2014_x86_64.whl (594 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 594.9/594.9 KB 3.5 MB/s eta 0:00:00
Collecting pyinstaller-hooks-contrib>=2021.4
  Downloading pyinstaller_hooks_contrib-2022.12-py2.py3-none-any.whl (250 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 250.0/250.0 KB 25.5 MB/s eta 0:00:00
Collecting altgraph
  Downloading altgraph-0.17.3-py2.py3-none-any.whl (21 kB)
Requirement already satisfied: setuptools in ./Mientorno/lib/python3.10/site-packages (from pyinstaller) (59.6.0)
Installing collected packages: altgraph, pyinstaller-hooks-contrib, pyinstaller
Successfully installed altgraph-0.17.3 pyinstaller-5.6.2 pyinstaller-hooks-contrib-2022.12

Una vez instalado lo primero que tenemos que hacer es ir al directorio donde tenemos la aplicación, que en este caso es el mismo, puesto que hemos copiado la aplicación app.py aquí.


 pyinstaller aplicación.py --onefile --windowed --icon=./logo.ico



La estructura del comando es la anterior, pero en este ejemplo no voy a usar icono.

(Mientorno) >>> pyinstaller app.py --onefile --windowed

app.py es el nombre del archivo que quieres convertir en un ejecutable.


Opciones:

--windowed es para que no aparezca la consola al ejecutar el programa. En mi caso no aparecerá la ventana de la consola (si el programa no tiene salida por terminal) y solamente el gui gráfico.

--onefile Para que se cree un solo archivo compilado con todo lo que la aplicación necesita. Se podrá ejecutar incluso en un ordenador que no tenga Python instalado. Si no lo incluyes te aparecerá un montón de archivos con todo lo necesario para que la aplicación funcione. Si lo haces solo aparecerá un archivo.

--icon. Más que nada en windows para que el ejecutable aparezca con el icono que le pongas. Eso si, tiene que ser un archivo ico.

Después de unas cuantas operaciones, al final el programa te dirá si se ha podido crear el ejecutable con éxito. El archivo o archivos del ejecutable ya compilado lo puedes encontrar en la carpeta "dist" que habrá creado el programa. Y solo queda ejecutarlo para ver que funcione.