apuntes:aplicaciones_web
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
apuntes:aplicaciones_web [2018/01/26 08:50] – [Utilizando WSGI] Santiago Faci | apuntes:aplicaciones_web [2019/06/12 16:07] – [Añadir aplicaciones a un proyecto] Santiago Faci | ||
---|---|---|---|
Line 43: | Line 43: | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
</ | </ | ||
Line 183: | Line 183: | ||
' | ' | ||
' | ' | ||
+ | ' | ||
] | ] | ||
Line 991: | Line 992: | ||
username = request.POST[' | username = request.POST[' | ||
password = request.POST[' | password = request.POST[' | ||
- | user = authenticate(username=username, | + | user = authenticate(request, |
if user is not None: | if user is not None: | ||
login(request, | login(request, | ||
Line 1055: | Line 1056: | ||
---- | ---- | ||
+ | ===== Informes ===== | ||
+ | Para la creación de informes con Django utilizaremos la librería [[http:// | ||
+ | |||
+ | El primer paso será instalar el paquete '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | A continuación se muestran algunos ejemplos de uso de esta librería para la generación de informes. Conviene tener en cuenta que en éstos, se muestra solamente el código corresponde a la función que permite crear la '' | ||
+ | |||
+ | En este primer ejemplo se creará un informe (en PDF) donde se mostrará un título y a continuación un listado con los títulos de todas las películas de la Base de Datos. En este caso utilizaremos el objeto '' | ||
+ | |||
+ | <code python views.py> | ||
+ | . . . | ||
+ | def informe_peliculas(request): | ||
+ | response = HttpResponse(content_type=' | ||
+ | response[' | ||
+ | |||
+ | buffer = BytesIO() | ||
+ | |||
+ | can = canvas.Canvas(buffer) | ||
+ | can.drawString(200, | ||
+ | |||
+ | peliculas = Pelicula.objects.all() | ||
+ | y = 700 | ||
+ | for pelicula in peliculas: | ||
+ | can.drawString(50, | ||
+ | y -= 20 | ||
+ | |||
+ | can.showPage() | ||
+ | can.save() | ||
+ | |||
+ | pdf = buffer.getvalue() | ||
+ | buffer.close() | ||
+ | response.write(pdf) | ||
+ | |||
+ | return response | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | En este segundo ejemplo, utilizando en este caso el objeto '' | ||
+ | |||
+ | <code python views.py> | ||
+ | . . . | ||
+ | def informe_peliculas(request): | ||
+ | response = HttpResponse(content_type=' | ||
+ | response[' | ||
+ | |||
+ | buffer = BytesIO() | ||
+ | |||
+ | documento = SimpleDocTemplate(buffer, | ||
+ | contenido = [] | ||
+ | estilos = getSampleStyleSheet() | ||
+ | cabecera = Paragraph(" | ||
+ | contenido.append(cabecera) | ||
+ | |||
+ | cabecera_tabla = (' | ||
+ | datos = [(pelicula.titulo, | ||
+ | tabla = Table([cabecera_tabla] + datos) | ||
+ | tabla.setStyle(TableStyle([(' | ||
+ | |||
+ | contenido.append(tabla) | ||
+ | documento.build(contenido) | ||
+ | response.write(buffer.getvalue()) | ||
+ | buffer.close() | ||
+ | return response | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | Podéis encontrar más información en esta [[https:// | ||
===== Internacionalización ====== | ===== Internacionalización ====== | ||
Line 1116: | Line 1188: | ||
- | ==== Utilizando WSGI ==== | + | ==== Utilizando WSGI con Apache |
En este apartado veremos como desplegar una aplicación web Django con Apache usando el módulo WSGI. Para ello tendremos que realizar una serie de ajustes, instalación y configuraciones: | En este apartado veremos como desplegar una aplicación web Django con Apache usando el módulo WSGI. Para ello tendremos que realizar una serie de ajustes, instalación y configuraciones: | ||
Line 1124: | Line 1196: | ||
=== Ajustar parámetros en el proyecto Django === | === Ajustar parámetros en el proyecto Django === | ||
+ | |||
+ | Antes de comenzar, tenemos que comprobar que tenemos instalado el intérprete de Python y todos los paquetes necesarios en la máquina servidor. En nuestro caso al menos los paquetes '' | ||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | </ | ||
Lo primero que haremos será reunir todos los ficheros estáticos de la aplicación con ayuda del siguiente comando, lo que generará una carpeta '' | Lo primero que haremos será reunir todos los ficheros estáticos de la aplicación con ayuda del siguiente comando, lo que generará una carpeta '' | ||
Line 1131: | Line 1216: | ||
. . . | . . . | ||
. . . | . . . | ||
- | 543 static files copied to '/ | + | 543 static files copied to '/ |
</ | </ | ||
Line 1145: | Line 1230: | ||
STATIC_ROOT = os.path.join(BASE_DIR, | STATIC_ROOT = os.path.join(BASE_DIR, | ||
# Directorio a partir del cual se almacenarán los ficheros que se suban con algún modelo (en '' | # Directorio a partir del cual se almacenarán los ficheros que se suban con algún modelo (en '' | ||
- | MEDIA_ROOT = '/ | + | MEDIA_ROOT = '/ |
# Define los hosts que tienen permitido acceder a la aplicación web | # Define los hosts que tienen permitido acceder a la aplicación web | ||
ALLOWED_HOSTS = [' | ALLOWED_HOSTS = [' | ||
Line 1152: | Line 1237: | ||
. . . | . . . | ||
</ | </ | ||
+ | |||
+ | En el fichero ''/ | ||
+ | |||
+ | <file python peliculas/ | ||
+ | . . . | ||
+ | url(r' | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | De esta manera, una vez desplegada correctamente la aplicación, | ||
=== Instalación y configuración de Apache === | === Instalación y configuración de Apache === | ||
Line 1172: | Line 1267: | ||
Finalmente tendremos que crear un host virtual con las directivas habituales para un sitio alojado por Apache, al que añadiremos algunas específicas por tratarse de una aplicación web hecha con Python | Finalmente tendremos que crear un host virtual con las directivas habituales para un sitio alojado por Apache, al que añadiremos algunas específicas por tratarse de una aplicación web hecha con Python | ||
- | <file apache / | + | <file apache / |
< | < | ||
ServerName mispeliculas.com | ServerName mispeliculas.com | ||
ServerAdmin santi@codeandcoke.com | ServerAdmin santi@codeandcoke.com | ||
- | Alias /static / | + | Alias /static / |
- | < | + | < |
Require all granted | Require all granted | ||
</ | </ | ||
- | < | + | < |
<Files wsgi.py> | <Files wsgi.py> | ||
Require all granted | Require all granted | ||
Line 1188: | Line 1283: | ||
</ | </ | ||
- | WSGIDaemonProcess peliculas python-path=/ | + | WSGIDaemonProcess peliculas python-path=/ |
WSGIProcessGroup peliculas | WSGIProcessGroup peliculas | ||
- | WSGIScriptAlias / / | + | WSGIScriptAlias / / |
- | ErrorLog ${APACHE_LOG_DIR}/ | + | ErrorLog ${APACHE_LOG_DIR}/ |
- | CustomLog ${APACHE_LOG_DIR}/ | + | CustomLog ${APACHE_LOG_DIR}/ |
</ | </ | ||
</ | </ | ||
Line 1208: | Line 1303: | ||
<code bash> | <code bash> | ||
- | santi@zenbook: | + | santi@zenbook: |
- | santi@zenbook: | + | santi@zenbook: |
- | santi@zenbook: | + | santi@zenbook: |
- | santi@zenbook: | + | santi@zenbook: |
</ | </ | ||
- | Y ahora podrás visitar tu aplicación web Django accediendo directamente | + | También es posible que necesitemos asignar permisos de escritura en la carpeta donde se sube el contenido |
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | Y ahora podrás visitar tu aplicación web Django accediendo directamente a '' | ||
+ | |||
+ | ==== Desplegar la aplicación utilizando entornos virtuales ==== | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | santi@zenbook: | ||
+ | santi@zenbook: | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | santi@zenbook: | ||
+ | . . . | ||
+ | santi@zenbook: | ||
+ | </ | ||
+ | |||
+ | <file apache / | ||
+ | . . . | ||
+ | WSGIDaemonProcess peliculas python-path=/ | ||
+ | . . . | ||
+ | </ | ||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
Line 1246: | Line 1366: | ||
---- | ---- | ||
- | (c) 2017 Santiago Faci | + | (c) 2018 Santiago Faci |
apuntes/aplicaciones_web.txt · Last modified: 2019/06/12 16:08 by Santiago Faci