source: sapic/curso_django/curso_django.tex @ 90130ad

erwinexplicacion_situacionalgestion_usuariostaller_django
Last change on this file since 90130ad was 90130ad, checked in by Erwin Paredes <eparedes@…>, 7 años ago

Curso de Django

  • Propiedad mode establecida a 100644
File size: 14.0 KB
Línea 
1\documentclass[xcolor=dvipsnames]{beamer}
2\usetheme{Berkeley}
3\usepackage[spanish]{babel}
4\usepackage[utf8]{inputenc}
5\usepackage[T1]{fontenc}
6\usepackage{lmodern}
7\usepackage{fancyhdr}
8\usepackage{graphicx}
9\usepackage{mathrsfs}
10\usepackage{amsmath}
11\usepackage{lmodern}
12\usepackage{multimedia}
13\usepackage{hyperref}
14\usepackage{varioref}
15\usepackage{ragged2e}
16\usepackage{etoolbox}
17\usepackage{lipsum}
18\usepackage{fancyvrb}
19\fvset{fontsize=\footnotesize}
20\RecustomVerbatimEnvironment{verbatim}{Verbatim}{}
21\apptocmd{\frame}{}{\justifying}{} % Allow optional arguments after frame.
22\usecolortheme[{rgb={0.6,0,0}}]{structure}
23\setbeamercovered{transparent}
24\setbeamertemplate{items}[ball]
25\setbeamertemplate{blocks}[rounded][shadow=true]
26\beamertemplateshadingbackground{gray!50}{white!50}
27\newtheorem{Ejemplo}{Django}
28\useoutertheme{infolines}
29\title []{Framework Django 1.11}
30\author{Instructor Ing. Erwin Paredes}
31%\logo{ \includegraphics[height=3cm]{figura/logo-blanco2.png}}
32\institute{CENDITEL}
33\date{\today}
34
35\begin{document}
36
37\section{Cenditel}
38\begin{frame}
39\maketitle
40\end{frame}
41
42\subsection{La Fundación}
43\begin{frame}
44\begin{block}{Fundación CENDITEL}
45\indent   
46Somos el Centro Nacional de Desarrollo e Investigación en Tecnologías Libres, cuyas actividades son el desarrollo de proyectos con impacto tecnológico enmarcados en las áeas de Software, Hardware y Telecomunicaciones.
47https://www.cenditel.gob.ve
48
49\end{block}
50\end{frame}
51
52\subsection{Finalidad del Curso}
53\begin{frame}
54\begin{block}{Finalidad}
55     
56Consolidar la comunidad de desarrollo en software libre alrededor de la tecnología, en este caso el framework de desarrollo Django del lenguaje de programación Python
57\end{block}
58\end{frame}
59
60\subsection{Contenido del Curso}
61\begin{frame}
62\begin{block}{Contenido del Curso}
63\begin{itemize}
64\item 
65Introducción
66\item 
67Configurar ambiente de trabajo
68\item 
69Crear proyecto
70\item 
71Crear aplicaciones y estructura del proyecto
72\item 
73Modelos y migraciones
74\item 
75Relaciones
76\item 
77Django shell y Querysets
78\item 
79Configurar URLs y primera views
80\item 
81Sistema de plantillas
82\item 
83Configurar archivos estáticos
84\item 
85Listar Registros
86\item 
87Formularios y vista para anexar registros
88\item 
89Vistas para modificar y eliminar registros
90\end{itemize}
91\end{block}
92\end{frame}
93
94
95\begin{frame}
96\begin{block}{Contenido del Curso}
97\begin{itemize}
98\item
99ListView, CreateView, UpdateView, DeleteView   
100\item
101Crear Login
102\item
103Registro de Usuarios
104\item
105Decorador Login required
106\item
107Recuperar contraseña por correo
108\item
109Introducción a conceptos avanzados
110\end{itemize}
111\end{block}
112\end{frame}
113
114
115
116\section{Django}
117\subsection{Introducción}
118\begin{frame}
119Django: Es un entorno de trabajo para el desarrollo Web, basado en el lenguaje de programación Python.
120
121Un entorno de trabajo o framework, implica una estructura conceptual y conjunto de herramientas que típicamente son un conjunto de librerías, que permite organizar el desarrollo.
122
123Para el framework Django la estructura conceptual es el denominado MVC (Modelo Vista Controlador), esto es, se organiza el desarrollo en módulos que separan el modelo de datos, la interfaz o vista y el comportamiento.
124
125Por lo que para cada aplicación o módulo que conforma el proyecto se agrupa en lo siguientes archivos:
126
127\begin{itemize}
128 \item models.py :Contiene las clases que definen la estructura de datos
129 \item views.py  :Contiene la codificación de las funcionalidades que permiten controlar el comportamiento del sistema.
130 \item *.html    :Contiene la codificación de la interfaz
131\end{itemize}
132\end{frame}
133
134\subsection{Configurar ambiente de trabajo}
135\begin{frame}[fragile]
136
137\begin{Large}\textbf{Sitio Oficial}\end{Large}
138\begin{verbatim}
139
140https://www.djangoproject.com/
141
142Instalación
143
144https://docs.djangoproject.com/en/1.11/intro/install
145
146Descarga:
147
148https://www.djangoproject.com/download/
149\end{verbatim}
150\end{frame}
151
152\begin{frame}[fragile]
153
154\begin{Large}\textbf{Instalación}\end{Large}
155\begin{verbatim}
156// Descomprimir el archivo
157
158tar -xzvf Django1.11.tar.gz
159
160cd Django1.11
161
162python setup.py install
163
164// Comprobar la instalación del framework:
165
166python
167import django
168django.VERSION
169
170Ctrl + D
171\end{verbatim}
172\end{frame}
173
174\subsection{Crear proyecto}
175\begin{frame}[fragile]
176
177\begin{verbatim}
178// Crear el primer proyecto:
179
180django-admin startproject curso
181
182// este comando crea la siguiente infraestructura
183de carpetas y archivos:
184
185curso/
186    manage.py
187    curso/
188        __init__.py
189        settings.py
190        urls.py
191        wsgi.py
192
193
194Configurar la base de datos
195
196\end{verbatim}
197\end{frame}
198
199\begin{frame}[fragile]
200
201\begin{verbatim}
202// Se debe haber instalado el gestor de la Base de
203Datos Postgresql  y la librería de conexión psycopg2
204// Creamos la base de datos:
205su postgres
206psql
207CREATE USER administrador;
208CREATE DATABASE curso;
209
210// Se edita el archivo curso/settings.py la constante
211DATABASES = {
212   'default': {
213        'ENGINE': 'django.db.backends.postgresql',
214        'NAME': 'curso',
215        'USER': 'administrador',
216        'PASSWORD': 'clave',
217        'HOST': '127.0.0.1',
218        'PORT': '5432',
219  } }
220\end{verbatim}
221\end{frame}
222
223\begin{frame}[fragile]
224\begin{verbatim}
225// Se guarda y ejecuta el siguiente comando para
226crear las tablas iniciales del proyecto:
227
228python manage.py migrate
229
230// Se ejcuta el comando para crear el superusuario o
231usuario administrador del proyecto:
232
233python manage.py createsuperuser
234
235// Se introducen los datos que solicita
236// Se ejecuta el siguiente comando para activar el
237servidor de prueba de forma local
238
239python manage.py runserver
240\end{verbatim}
241\end{frame}
242
243\begin{frame}[fragile]
244\begin{verbatim}
245python manage.py runserver
246
247// Arroja el siguiente mensaje
248Performing system checks...
249
250System check identified no issues (0 silenced).
251
252July 26, 2017 - 15:32:30
253Django version 1.11.3,using settings 'curso.settings'
254Starting development server at http://127.0.0.1:8000/
255Quit the server with CONTROL-C.
256
257// Abrimos el navegador de preferencia y colocamos la
258siguiente dirección para acceder al sistema
259administrativo del proyecto:
260
261http://localhost:8000/admin
262\end{verbatim}
263\end{frame}
264
265\subsection{Crear aplicaciones}
266\begin{frame}[fragile]
267\begin{verbatim}
268
269http://localhost:8000/admin
270
271// En el debemos autenticarnos con el usuario y
272password del superusuario creado en los pasos
273anteriores
274
275// Allí podemos gestionar los usuarios del sistema
276así como los grupos que evenctualmente se utilizan
277para asignar permisos de acceso.
278
279// En el terminal presionar las teclas Ctrl + C para
280interrumpir la ejecución del servidor y así crear
281las aplicaciones del proyecto.
282
283python manage.py startapp encuesta
284
285\end{verbatim}
286\end{frame}
287
288\subsection{Modelos}
289\begin{frame}[fragile]
290\begin{verbatim}
291python manage.py startapp encuesta
292
293// Se edita el archivo encuesta/models.py
294
295from django.db import models
296
297class Question(models.Model):
298    question_text = models.CharField(max_length=200)
299    pub_date =models.DateTimeField('date published')
300
301class Choice(models.Model):
302    question = models.ForeignKey(Question,
303               on_delete=models.CASCADE)
304    choice_text = models.CharField(max_length=200)
305    votes = models.IntegerField(default=0)
306
307\end{verbatim}
308\end{frame}
309
310\begin{frame}[fragile]
311\begin{verbatim}
312// Almacenamos y editamos el archivo
313curso/settings.py la constante:
314
315INSTALLED_APPS = [
316    ...
317    'django.contrib.staticfiles',
318    'encuesta',
319]
320
321// Para crear las tablas correspondiente de models.py
322se ejecuta el comando:
323
324python manage.py makemigrations encuesta
325
326python manage.py migrate encuesta
327
328\end{verbatim}
329\end{frame}
330
331\subsection{Relaciones}
332\begin{frame}[fragile]
333\begin{verbatim}
334// Para el manejo de las tablas por medio del
335framework se puede realizar desde el terminal
336con el comando:
337
338python manage.py shell
339
340
341\end{verbatim}
342\end{frame}
343
344\subsection{Django shell y Querysets}
345\begin{frame}[fragile]
346\begin{verbatim}
347
348// Allí podemos ejecutar las siguientes instrucciones
349
350from encuesta.models import Question, Choice
351from django.utils import timezone
352
353Question.objects.all()
354q = Question(question_text="Que hay de nuevo?",
355                     pub_date=timezone.now())
356q.save()
357q.id
358q.question_text
359q.pub_date
360q.question_text = "Q ai d nuevo?"
361q.save()
362
363Ctril + D para salir
364\end{verbatim}
365\end{frame}
366
367\begin{frame}[fragile]
368\begin{verbatim}
369Editamos nuevamente el archivo encuesta/models.py
370para añadir el sigueinte metodo a la clase Question
371
372import datetime
373
374from django.db import models
375from django.utils import timezone
376
377class Question(models.Model):
378    # ...
379    def was_published_recently(self):
380        return self.pub_date >= timezone.now() -
381                      datetime.timedelta(days=1)
382
383Guardamos y volvemos a terminal:
384
385python manage.py shell
386
387\end{verbatim}
388\end{frame}
389
390\begin{frame}[fragile]
391\begin{verbatim}
392from polls.models import Question, Choice
393
394Question.objects.all()
395q = Question.objects.get(pk=1)
396q.was_published_recently()
397
398q = Question.objects.filter(id=1)
399
400q = Question.objects.filter(
401          question_text__startswith='Q')
402
403from django.utils import timezone
404current_year = timezone.now().year
405Question.objects.get(pub_date__year=current_year)
406
407Question.objects.get(id=2) Error...
408\end{verbatim}
409\end{frame}
410
411\begin{frame}[fragile]
412\begin{verbatim}
413q = Question.objects.get(pk=1)
414q.choice_set.all()
415q.choice_set.create(choice_text='No mucho', votes=0)
416q.choice_set.create(choice_text='Muchas cosas'
417                                           ,votes=0)
418c = q.choice_set.create(choice_text='De todo un poco'
419                                           ,votes=0)
420
421c.question
422
423q.choice_set.all()
424q.choice_set.count()
425
426Crtl + D para salir
427
428\end{verbatim}
429\end{frame}
430
431\begin{frame}[fragile]
432\begin{verbatim}
433Incluir el modelo de la aplicación encuesta
434en el sistema admin:
435
436Editamos el archivo encuesta/admin.py
437from django.contrib import admin
438
439from .models import Question
440
441admin.site.register(Question)
442
443Guardamos y ejecutamos el servidor
444de prueba nuevamente:
445
446python manage.py runserver
447
448en el navegador http://localhost:8000/admin
449
450\end{verbatim}
451\end{frame}
452
453\subsection{Configurar URLs y primera views}
454\begin{frame}[fragile]
455\begin{verbatim}
456Crear la primera vista para acceso del proyecto
457Editamos el archivo encuesta/urls.py
458
459from django.conf.urls import url
460from . import views
461urlpatterns = [
462    # ex: /encueta/
463    url(r'^$', views.index, name='index'),
464    # ex: /encuesta/5/
465    url(r'^(?P<question_id>[0-9]+)/$',
466    views.detail, name='detail'),
467    # ex: /encuesta/5/results/
468    url(r'^(?P<question_id>[0-9]+)/results/$',
469    views.results, name='results'),
470    # ex: /encuesta/5/vote/
471    url(r'^(?P<question_id>[0-9]+)/vote/$',
472     views.vote, name='vote'),
473]
474\end{verbatim}
475\end{frame}
476
477\begin{frame}[fragile]
478\begin{verbatim}
479Editamos el archivo encuesta/views.py:
480
481from django.http import HttpResponse
482from .models import Question
483
484def index(request):
485    question_list = Question.objects.order_by('-pub_date')[:5]
486    output = ', '.join([q.question_text for q in question_list])
487    return HttpResponse(output)
488
489def detail(request, question_id):
490    return HttpResponse("Question No: %s." % question_id)
491
492def results(request, question_id):
493    response = "Results of question %s."
494    return HttpResponse(response % question_id)
495
496def vote(request, question_id):
497    return HttpResponse("Voting on question %s." % question_id)
498\end{verbatim}
499\end{frame}
500
501\begin{frame}[fragile]
502\begin{verbatim}
503Guardamos y ejecutamos el servidor de prueba y
504probamos los enlaces desde el navegador:
505
506python manage.py runserver
507
508En el navegador probamos los siguientes enlaces:
509
510http://localhost:8000/encueta
511http://localhost:8000/encueta/1
512http://localhost:8000/encueta/1/result
513http://localhost:8000/encueta/1/vote
514
515\end{verbatim}
516\end{frame}
517
518\subsection{Sistema de plantillas}
519
520\begin{frame}[fragile]
521\begin{verbatim}
522Uso del plantillas:
523
524Creamos la siguiente estructura
525
526cd encuesta
527mkdir templates
528mkdir templates/encuesta
529
530y editamos el archivo index.html allí
531
532gedit encuesta/templates/encuesta/index.html
533
534\end{verbatim}
535\end{frame}
536
537\begin{frame}[fragile]
538\begin{verbatim}
539{% if question_list %}
540    <ul>
541    {% for question in question_list %}
542        <li>
543         <a href="/encuesta/{{ question.id }}/">
544          {{
545            question.question_text
546          }}
547         </a>
548        </li>
549    {% endfor %}
550    </ul>
551{% else %}
552    <p>No hay encuestas.</p>
553{% endif %}
554\end{verbatim}
555\end{frame}
556
557\begin{frame}[fragile]
558\begin{verbatim}
559Guardamos y modificamos el archivo encuesta views.py
560para que utilice la plantilla
561
562from django.http import HttpResponse
563from django.template import loader
564
565from .models import Question
566
567
568def index(request):
569    question_list = Question.objects.order_by('-pub_date')[:5]
570    template = loader.get_template('polls/index.html')
571    context = {
572        'question_list': question_list,
573    }
574    return HttpResponse(template.render(context, request))
575
576\end{verbatim}
577\end{frame}
578
579\begin{frame}[fragile]
580\begin{verbatim}
581o utilizando la shortcuts render
582
583from django.shortcuts import render
584
585from .models import Question
586
587
588def index(request):
589    question_list = Question.objects.order_by('-pub_date')[:5]
590    context = {'question_list': question_list}
591    return render(request, 'polls/index.html', context)
592
593
594\end{verbatim}
595\end{frame}
596
597\subsection{Configurar estáticos}
598\begin{frame}[fragile]
599\begin{verbatim}
600
601\end{verbatim}
602\end{frame}
603
604\subsection{Listar Registros}
605\begin{frame}[fragile]
606\begin{verbatim}
607
608\end{verbatim}
609\end{frame}
610
611\subsection{Anexar registros}
612\begin{frame}[fragile]
613\begin{verbatim}
614
615\end{verbatim}
616\end{frame}
617
618\subsection{Modificar y eliminar registros}
619\begin{frame}[fragile]
620\begin{verbatim}
621
622\end{verbatim}
623\end{frame}
624
625\subsection{View's}
626\begin{frame}[fragile]
627\begin{verbatim}
628
629\end{verbatim}
630\end{frame}
631
632\subsection{Crear Login}
633\begin{frame}[fragile]
634\begin{verbatim}
635
636\end{verbatim}
637\end{frame}
638
639\subsection{Registro de Usuarios}
640\begin{frame}[fragile]
641\begin{verbatim}
642
643\end{verbatim}
644\end{frame}
645
646\subsection{Login required}
647\begin{frame}[fragile]
648\begin{verbatim}
649
650\end{verbatim}
651\end{frame}
652
653\subsection{Recuperar contraseña por correo}
654\begin{frame}[fragile]
655\begin{verbatim}
656
657\end{verbatim}
658\end{frame}
659
660\subsection{Conceptos avanzados}
661\begin{frame}[fragile]
662\begin{verbatim}
663
664\end{verbatim}
665\end{frame}
666
667\end{document}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.