-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathDjango.txt
executable file
·7857 lines (6281 loc) · 245 KB
/
Django.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
====================
Guía de Django by dM
====================
Django es un framework de desarrollo web de código abierto, escrito en Python,
que respeta el patrón de diseño conocido como Modelo–vista–controlador. Fue
desarrollado en origen para gestionar varias páginas orientadas a noticias de la
World Company de Lawrence, Kansas, y fue liberada al público bajo una licencia
BSD en julio de 2005; el framework fue nombrado en alusión al guitarrista de
jazz gitano Django Reinhardt. En junio de 2008 fue anunciado que la recién
formada Django Software Foundation se haría cargo de Django en el futuro.
La meta fundamental de Django es facilitar la creación de sitios web complejos.
Django pone énfasis en el re-uso, la conectividad y extensibilidad de
componentes, el desarrollo rápido y el principio No te repitas (DRY, del inglés
Don't Repeat Yourself). Python es usado en todas las partes del framework,
incluso en configuraciones, archivos, y en los modelos de datos.
========================
Estándares de Desarrollo
========================
Los estándares de desarrollo constituyen las normas o patrones de referencia que
se deben implementar en el desarrollo de aplicaciones de software. Entre los
estándares de desarrollo más comunes se encuentran: normas de codificación,
normas y esquemas de seguridad, estándares de interfaz u/s, entre otros.
======================
Normas de Codificación
======================
Para el desarrollo de un sistema se pueden implementar algunos estándares
básicos para su codificación, los cuales contemplan lo establecido en la PEP-8
--> https://www.python.org/dev/peps/pep-0008/
Algunos puntos importantes que encontramos en el PEP8 son los siguientes:
-Use sangría de 4 espacios, sin tabulaciones.
-Las líneas no deberían sobrepasar los 79 caracteres.
-Use líneas en blanco para separar funciones y clases, también para grandes
bloques de código dentro de funciones.
-Cuando sea posible, coloque los comentarios aparte del código de tal manera que
en esa línea sólo haya comentarios.
-Use cadenas de documentación (docstrings).
-Use espacios a los lados de los operadores y después de comas, pero no
directamente dentro de constructos con paréntesis. Ej: a = f(1, 2) + g(3, 4).
-Nombre sus clases y funciones de forma consistente, como convención se utiliza
CamelCase para las clases y minúsculas_con_guion_bajo para funciones y métodos.
-Siempre utilice self como el nombre para el primer argumento de un método.
-No use codificaciones de caracteres lujosas si su código pretende ser utilizado
en el ámbito internacional. Se prefiere que utilicen UTF-8. Tomar en cuenta el
PEP-0263 colocando la directiva para codificación UTF-8
(# -*- coding: utf-8 -*-) a los archivos .py
==================================================
Estándares para la documentación del código fuente
==================================================
-La utilización de docstrings permite generar automáticamente documentación,
como alternativas a utilizar para generar la documentación del proyecto tenemos
doxygen o Sphinx.
Cabecera para los scripts de Python, indica al compilador o editor que se trata
de un fichero python
La segunda linea da codificación UTF-8 al programa
#!/usr/bin/env python
# -*- coding: utf-8 -*-
A veces solo es necesario usar la segunda línea
# -*- coding: utf-8 -*-
======================
Algo de teoría primero
======================
Framework de desarrollo web de codigo abierto escrito en Python (todo lo que se
haga dentro de Django sera en Python).
-Permite construir aplicaciones web mas rapido y con menos codigo.
-El un proyecto en Django se divide en varias partes llamadas aplicaciones, el
conjunto esas aplicaciones genera un proyecto general en Django.
-Django se basa en la reutilizacion de el codigo que ya hemos hecho, en tratar
de no repetir y volver a escribir ese codigo. No duplcaremos el codigo.
-Cuenta con su propia ORM (Object relational maping) quiere decir que nuestra
base de datos relacional que ya conocemos la va a transformar a una base de
datos orientada a objetos
-Las tablas que soliamos tener vamos a verlas en formas de clases y las
consultas en SQL seran a nivel de Python.
-Django trae su propio administrador por defecto: Podemos gestionar todos los
datos de nuestro proyecto con el administrador.
========================
Patrón de desarrollo MVT
========================
Comparemos las caracteristicas del MVC y MVT
========================
Modelo-vista-controlador
========================
-Modelo: Se encarga de manipular toda la informacion de nuestro proyecto que
este en nuestras bases de datos.
-Vista: Es la que decide como es que vamos a mostrar toda esta informacion
almacenada.
-Controlador: Es el que se encarga de hacer la comunicacion entre el modelo y
las vista
=====================
Modelo-Vista-Template
=====================
(Ahora Django hara el papel de el controlador, que se encargaba de la
comunicacion de los modelos y las vistas).
-Modelo: Se encarga de manipular toda la informacion de nuestro proyecto que
este en nuestras bases de datos.
-Vista: Es la que se encarga de decir que informacion vamos a mostrar y en que
template.
-Template: Es el que se encarga de coger toda la informacion, organizarla y ver
como se va a mostrar.
===============
Instalar Django
===============
Django está escrito completamente en Python por lo que el primer paso en la
instalación de Django es el asegurarse de que Python esta instalado.
-Bajar Django de: http://www.python.org/download/
Ejemplo: Django-1.5.12.tar.gz
-Descomprimir el archivo: Nos dejara una carpeta
Ejemplo: Django-1.5.12
-Dentro de (Django-1.5.12) esta el archivo setup.py
-Ejecutar: sudo python setup.py install #Estando en el directorio del archivo
-Recomendada: Tambien podemos realizar la instalación desde PIP
que es un repositorio de paquetes python facil de manejar.
===========================
Verificación de instalación
===========================
-Dentro de la consola de Python ejecutamos:
>>> import django
>>> django.VERSION
(1, 5, 12, 'final', 0)
Nos mostrara la version de Django instalada
De igual forma podemos comprobar versiones de otros paquetes que estén
instalados: ejemplo:
>>> import django_extensions
>>> django_extensions.VERSION
(1, 7, 4)
-Otra forma:
>>> import django
>>> print(django.get_version())
1.5.12
==============================
Compatibilidad / Base de Datos
==============================
Django es compatible con cuatro motores de base de datos:
-PostgreSQL (http://www.postgresql.org/)
-SQLite 3 (http://www.sqlite.org/)
-MySQL (http://www.mysql.com/) #Django requiere MySQL 4.0 o superior
-Oracle (http://www.oracle.com/)
===================
Creando un proyecto
===================
-Un proyecto es una colección de ajustes de una instancia de Django incluyendo
la configuración de la base de datos, las opciones específicas de Django, y la
configuración de la aplicación.
-Para crear un proyecto hay que abrir unaconsola situarse donde se quiere crear
el proyecto y Ejecutar:
$ django-admin.py startproject NombreDelProyecto
Se creará un directorio NombreDelProyecto.
-El comando startproject crea un directorio (NombreDelProyecto) que contiene
cuatro archivos:
1) __init__.py
-Es un fichero vacío, y normalmente no se le añade nada.
-Le dice a Python que este directorio debería ser considerado un paquete Python
(un grupo de módulos).
2) manage.py
-Permite interactuar con el proyecto Django, administrar el proyecto.
3) settings.py
-Opciones/configuraciones para este proyecto de Django.
-Muestra las características de configuración de este proyecto Django:
Administradores, conexion y acceso a la base de datos, aplicaciones instaladas,
sesiones etc.
-Es un módulo Python normal con variables a nivel de módulo que representan
configuraciones de Django.
4) urls.py
-La declaración de las URL para este proyecto de Django;
-Es como una tabla de contenidos de tu sitio hecho con Django.
-Las URLs(Localizador uniforme de recursos: Sirve para nombrar recursos en
Internet o en servidores locales. Tiene como proposito asignar una direccion
unica a cada uno de los recursos disponibles ejemplo: textos, imagenes, vdeos,
etc...) para este proyecto Django.
-Contiene las direcciones URL de este proyecto Django.
-Al principio no contiene ninguna.
(Estos archivos ya constituyen una aplicación Django de trabajo)
=========================
El servidor de desarrollo
=========================
-Entrar al directorio (NombreDelProyecto) y ejecuta el comando:
$ python manage.py runserver
Validar los modelos en busca de errores sin necesidad de correr el servidor.
$ python manage.py check
Validating models...
0 errors found
February 22, 2015 - 13:35:04
Django version 1.5.12, using settings 'NombreDelProyecto.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
(Arranca el servidor de desarrollo de Django un servidor web liviano escrito
completamente en Python. Se incluye en Django para que puedas desarrollar de
manera rápida sin tener que vértelas con la configuración de un servidor de
producción como Apache, hasta que estés listo para producción).
-Cuando el servidor está inicializado, visita http://127.0.0.1:8000/ usando un
navegador web. Se observara una página "Welcome to Django".
-Por defecto, el comando runserver arranca el servidor de desarrollo en el
puerto 8000.
Arranca el servido en el puerto 8080.
$ python manage.py runserver 8080
Cambiando la direccion IP donde va a correr el servidor:
$ python manage.py runserver 127.0.0.1:8000
ó
$ python manage.py runserver mi_ip_privada_en_la_red:8000
Con 0.0.0.0:8000 toma automáticamente la ip privada del equipo en la red local.
$ python manage.py runserver 0.0.0.0:8000
=================================
Configuración de la base de datos
=================================
En settings.py se pueden configurar los privilegios, nombre, etc a la base de
datos. En el archivo existen unas variables predeterminadas a las cuales podemos
cambiar el valor según se necesite, entre ellas están las variables de conexión
con la base de datos como:
ENGINE: Ya sea 'django.db.backends.postgresql_psycopg2',
'django.db.backends.mysql' o 'django.db.backends.sqlite3'. Otros backends
también están disponibles.
NAME: El nombre de tu base de datos. Si estás usando SQLite la base de datos
será un archivo en tu ordenador; en tal caso, NAME debería ser la ruta absoluta
incluyendo nombre de archivo, de dicho archivo. Si el archivo no existe se
creará automáticamente cuando sincronices la base de datos por primera vez.
USER: El usuario de la base de datos (no usado en SQLite).
PASSWORD: La contraseña de la base de datos (no usado en SQLite).
HOST: La máquina donde está ubicada la base de datos. Déjalo como una cadena
vacía si la base de datos está en la misma máquina física (no usado en SQLite).
PORT: Le indica a Django qué puerto usar cuando se conecte a la base de datos.
Si estás utilizando SQLite, deja este en blanco. En otro caso, si dejas este en
blanco, el adaptador de base de datos subyacente usará el puerto por omisión
acorde al servidor de base de datos. En la mayoría de los casos, el puerto por
omisión está bien, por lo tanto puedes dejar este en blanco.
Puerto por defecto de postgresql, generalmente no es necesario especificar uno
porque así lo tomará por defecto.
'PORT': '5432'
Fragmento tomado de un settings.py sobre éste tópico:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'database', # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
'USER': 'admin',
'PASSWORD': 123456,
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '', # Set to empty string for default.
}
}
==============================
Ejemplo de conexión con sqlite
==============================
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
==============
INSTALLED_APPS
==============
En el settings.py, la variable INSTALLED_APPS contiene el nombre de todas las
aplicaciones Django que están activadas en esta instancia de Django. Las
aplicaciones pueden ser empacadas y distribuidas para ser usadas por otros
proyectos.
Por defecto, INSTALLED_APPS contiene las siguientes aplicaciones, todas ellas
vienen con Django:
-django.contrib.auth -- Un sistema de autenticación.
-django.contrib.contenttypes -- Un framework para tipos de contenidos.
-django.contrib.sessions -- Un framework para manejar sesiones.
-django.contrib.sites -- Un framework para manejar múltiples sitios con una
única instalación Django.
====================
Aplicación de Django
====================
Es una colección de archivos de código fuente, incluyendo modelos y vistas, que
conviven en un solo paquete de Python y representen una aplicación completa de
Django.
-La aplicacion se creara en el directorio (NombreDelProyecto) con:
$ python manage.py startapp NombreAplicacion
-Esto creará un directorio NombreAplicacion, que contiene los siguiente
archivos:
-__init__.py
-models.py: En este archivo es donde vamos a crear nuestras tablas de las bases
de datos. Un modelo de Django es una descripción de los datos en la base de
datos, esta es tu capa de datos.
-tests.py
-views.py: En este archivo es donde pondremos todas las funciones que
necesitemos ejecutar en nuestro proyecto.
Las variables las llamo en mi template así: {{ variable }}
===========
Tips varios
===========
Crear el proyecto
$ django-admin startproject NombreDelProyecto
Configura el settings
Configurar zona horaria, lenguaje --> Using Language Identifiers:
http://www.i18nguy.com/unicode/language-identifiers.html
Configurar la base de datos
Elegir el motor y el nombre de la db, si se usa postgres esta debe estar creada
y tner un usuario, si se usa sqlite3 no hace falta crearla, solo agregando el
nombre Django la crea
Habilitar el administrador (apps,urls)
Descomentar las lineas correspondientes en el settings/apps y en el urls
Sincronisar la db.
Anterior a Django 1.7.x
$ python manage.py syncdb
Crear el super usuario.
Escribir el user, pass y email del superuser.
Correr el servidor, validar los modelos y probar el admin.
Probar el admin /admin
$ python manage.py runserver
Crear aplicacion y registrarla en el settings.
$ python manage.py startapp NombreAplicacion
Crear carpeta templates y declararla en el settings.
Declarar la carpeta de nuestras plantillas en el settings en TEMPLATE_DIRS con
la ruta completa '/home/osorio/Escritorio/inscripcion/templates'.
Abrir el views.py y declarar la funcion con el render y la template que
corresponda.
En la vista iran nuestras funciones y clases y decimos que plantillas vamos a
usar.
Crear el Index de la funcion y guardarlo en templates.
Crear el html y guardarlo en nuestra carpeta de plantillas .
Declarar la funcion de la vista en las urls.
Las vistas deben ser declaradas en las urls
url(r'^$', 'aplicacion.views.funcion', name='funcion'),
Probar el index con el servidor andando.
$ python manage.py runserver
Creamos los modelos.
En el models.py crearemos las clases que al final seran nuestras tablas con sus
campos en nuestra base de datos.
$ python manage.py sqlall books / books es el nombre de la aplicación, podremos
observar nuestros modelos de datos antes de crear las tablas con la
sincronizacion de la db.
Sincronizamos la db.
Al sincronizar, las clases que creamos en los modelos se generaran en tablas de
nuestra base de datos.
$ python manage.py syncdb
Corremos el servidor y entramos al admin para ver nuestras tablas En principio
no veremos nuestras tablas en el admin, tenemos que crear el archivo admin.py
en el directorio de la aplicacion y declaramos.
from django.contrib import admin
from .models import NombreClase
admin.site.register(NombreClase)
volvemos a correr el servidor, entramos al admin y ya podemos ver nuestra tabla
creada y podemos llenarla de datos.
Creamos un template donde mostraremos nuestro formulario basado en los modelos
de la base de datos, podemos usar el modelo como base para los forms, creamos el
template con el formulario, el metodo etc.
<form method="POST"> {% csrf_token %} Este es el token de segridad.
{{ form }}
<input type="submit" value="Enviar">
</form>
En la vista creamos una clase que contendra nuestro modelo
class RegistrarAlumno(CreateView):
template_name = "registrar.html"
model = Alumno
Con esto mandamos a la plantilla declarada un form el cual recibe el form en el
template asignado
Declaramos nuestra clase en la URLS para que la lea como vista.
url(r'^registrar/$', RegistrarAlumno.as_view(), name='RegistrarAlumno'),
Debemos revisar siempre los import, son muy importantes.
==================
Declarando los CSS
==================
Creamos la carpeta static que contendra nuetros css, imagenes y demas archvos
estaticos, se debe guardar a nivel de las plantillas
(aplicacion/static/css/estilo.css)
(aplicacion/templates/index.html)
Con esto llamamos nuestro CSS en la plantilla:
<head>
<title>PAGOS</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta charset="UTF-8" />
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'css/estilo.css' %}" />
</head>
=================================
Agregando imagenes a la plantilla
=================================
Los archivos de media seran llamados de la carpeta Img que por lo general
acompaña al css, se hace referencia a la carpeta static con {{STATIC_URL}} y
luego la ruta de la imagen:
Ejemplo:
<img src="Imagen.jpg" width="200px" heigth="200px"></img>
<img src="{{STATIC_URL}}css/Img/gris.JPG"></img> Agregando una imagen local
==========
Migrations
==========
Mediante la ejecución de makemigrations, le estás diciendo a Django que has
hecho algunos cambios a sus modelos y que desea que los cambios se almacenarán
como la migración.
Las migraciones son cómo almacena Django cambios a sus modelos (y por tanto el
esquema de base de datos).
Si hay modelos declarados en una aplicación, se creará una carpeta "migrations"
que contiene el esquema de la base de datos, muy similar a un fichero .sql, con
los nombres de las tablas, sus campos, y las fechas en que se crearon.
=========================
Estructura de un proyecto
=========================
# Algunos directorios debemos crearlos nosotros por ejemplo: templates, static,
admin.py
project
manage.py
database.db
project/
settings.py
urls.py
wsgi.py
app/
templates/
app/
base.html
index.html
admin.py
tests.py
models.py
forms.py
views.py
static/
css/
styles.css
img/
a.jpg
b.png
js/
jquery.js
=================================
Recommended Django Project Layout
=================================
myproject/
manage.py
myproject/
__init__.py
urls.py
wsgi.py
settings/
__init__.py
base.py
dev.py
prod.py
blog/
__init__.py
models.py
managers.py
views.py
urls.py
templates/
blog/
base.html
list.html
detail.html
static/
…
tests/
__init__.py
test_models.py
test_managers.py
test_views.py
users/
__init__.py
models.py
views.py
urls.py
templates/
users/
base.html
list.html
detail.html
static/
…
tests/
__init__.py
test_models.py
test_views.py
static/
css/
…
js/
…
templates/
base.html
index.html
requirements/
base.txt
dev.txt
test.txt
prod.txt
Estructura con los templates fuera de las aplicaciones, es un tipo de proyecto
menos modular.
myproject/
manage.py
myproject/
__init__.py
urls.py
wsgi.py
settings.py
app/
__init__.py
models.py
managers.py
views.py
urls.py
users/
__init__.py
models.py
views.py
urls.py
static/
css/
…
js/
…
templates/
base/
base.html
app/
index.html
users/
index.html
requirements/
base.txt
dev.txt
test.txt
prod.txt
La siguiente configuración de los templates dirs aplica a la estructura menos
modular.
==================================================
Configuración del settings para los templates dirs
==================================================
Esta configuración se usa cuando se crea una carpeta templates/app/xxx.html para
alvergar todos los templates de las aplicaciones.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
=====================================
LANGUAGE_CODE, idioma de los mensajes
=====================================
Django por defecto muestra una variedad de mensajes en los templates, ya sea
para validaciones en formularios u otros...
Por ellos el cambio del codigo de lenguaje es muy importante, por ejemplo
#LANGUAGE_CODE = 'en-us' Ver los mensajes en ingles
#LANGUAGE_CODE = 'en-es' Ver los mensajes en español
===========
Comentarios
===========
Al igual que en HTML o en un lenguaje de programación como Python, el lenguaje
de plantillas de Django permite usar comentarios. Para designar un comentario,
usa {# #} {# Esto es un comentario #} Este comentario no será mostrado cuando la
plantilla sea renderizada.
Un comentario no puede abarcar múltiples líneas. Esta limitación mejora la
performance del analizador sintáctico de plantillas. En la siguiente plantilla,
la salida del renderizado mostraría exactamente lo mismo que la plantilla (esto
es, la etiqueta comentario no será tomada como comentario):
Esto es una {# Esto no es
un comentario #}
prueba.
Si quieres usar un comentario que abarque varias líneas, usa la etiqueta {%
comment %}, así:
{% comment %}
Este es un comentario
que abarca varias líneas
{% endcomment %}
================
Tiempo de sesión
================
#Variable del settings.py que indica que a los 40min se destruye la sesión
creada de algún usuario autenticado.
# SESSION AGE 40 Minutes
#SESSION_COOKIE_AGE = 40*60
===========================================
Cerrar sesión cuando se cierra el navegador
===========================================
#Variable del settings.py
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
=================
Modelos en Django
=================
¿Qué es un modelo?
-En Django los modelos son como django tratara los datos, contendrá los campos
de los objetos que queremos guardar. Generalmente django creara por cada modelo
una tabla en la base de datos.
-Cada modelo es una clase python que hereda de django.db.models.Model
-Cada atributo del modelo representa un campo de la tabla de la base de datos.
==========
Los campos
==========
Los campos son el tipo de objeto del atributo que guardara, hay varios tipos:
-AutoField: Es un IntegerField que se incrementa cuando creas un nuevo objeto,
casi que no es necesario ya que django lo crea solo si no especificas otro campo
como id.
-BigIntegerField: Representa un Entero de 64 bit, es como el IntegerField, solo
que permite números desde el -9223372036854775808 hasta el 9223372036854775807.
El campo por defecto de los formularios es el TextField.
-BooleanField: El campo de true/false. El campo por defecto de los formularios
es un CheckboxInput. El valor por defecto es None si no defines el default.
-CharField: Para string pequeños, frases o palabras. El campo por defecto en
los formularios es el TextInput. max_length=20: Establece el tamaño máximo del
string, es requerido.
-CommaSeparateIntegerField: Guarda una lista de enteros separados por coma.
Max_length=20: Establece el valor máximo de los enteros, es requerido.
DateField: Guarda una instancia de la fecha a partir de la clase datetime.date
de python.
auto_now=True: Actualiza la fecha cada vez que se actualiza el objeto.
auto_now_add=True: Guarda la fecha de cuando se creo.
DateTimeField: Como el DateField solo que guarda también la hora.
auto_now=True: Actualiza la fecha cada vez que se actualiza el objeto.
auto_now_add=True: Guarda la fecha de cuando se creo.
DecimalField: Guarda números decimales.
max_digits=5: Establece el numero de dígitos máximo, la suma de la parte entera
y la decimal
decimal_places=2: Establece el número de dígitos de la parte decimal.
EmailField: Es un CharField que comprueba lo introducido para verificar que sea
un email.
max_length=75: Establece el tamaño máximo del email, es requerido.
-FileField: Sirve para guardar archivos en el servidor. En el formulario saldría
el campo de escoger un fichero del ordenador. Tiene que estar definido el
MEDIA_ROOT en el settings para que guarde los archivos. Guardara el archivo en
la ruta especificada por el MEDIA_ROOT. upload_to='/videos': Subirá el archivo a
la carpeta vídeos alojada en la carpeta definida por MEDIA_ROOT. (Requerido)
FileField(upload_to='/video'[, max_length=100, **options]): si se quiere poner
los atributos opcionales tendrán que añadirse así.
-FilePathField: Sirve para mostrar los archivos accesible de una carpeta
siguiendo una restricción si se quiera, para hacer alguna operación sobre ellos.
FilePathField(path=None[,match=None,recursive=False, max_length=100, **options])
path (requerido): directorio del que sacara FilePathField las opciones.
match: filtro por el que pasaran los archivos, se usaran expresiones regulares.
recursive: False por defecto, especifica si entran las subcarpetas de la ruta
indicada por path.
max_length: Indica el tamaño máximo del nombre del archivo.
-FloatField: Campo que guarda una instancia del modelo Float de python.
-ImageField: Como el FileField pero solo acepta formatos de imágenes. Tiene dos
campos opcionales mas que el FielField.
height_field: Representa el alto máximo de la imagen.
width_field: Representa el ancho máximo de la imagen.
-IntegerField: Guarda un entero.
-IPAddressField: Guarda un string que coincida con el formato ip (192.168.0.1).
-GenericIPAddressField: Guarda una ip, ya sea ipv4 o ipv6. Para saber como las
guarda Doc Django.
-NullBooleanField: Como el BooleanField pero permite null.
-PositiveIntegerField: Guarda un entero mayor o igual que cero.
-SlugField: Campo que guarda una pequeña etiqueta (letras, números, guiones)
suele usarse en las url.
-TextField: Campo que guarda texto.
-TimeField: Guarda una hora, comparte los campos con DateField
auto_now=True: Actualiza la hora cada vez que se actualiza el objeto.
auto_now_add=True: Guarda la hora de cuando se creo.
-URLField: Guarda una dirección html, comprueba que lo introducido sea una
dirección html.
==================
Campos de relación
==================
ForeignKey: Para referir objetos a un objeto, un modelo puede referirse a un
modelo, pero un modelo puede estar referido a mas de uno, es lo que se llama un
many-to-one referencia.
ManyToManyField: Para guardar una referencia a varios objetos de la misma clase.
Hay que definir la clase con la que se relaciona. Va guardando las referencias a
esos objetos en una lista con las primary keys referncia.
OneToOneField: Es como el ForeignKey pero tiene unique=True, por lo que solo
puede haber una referencia a ese objeto.
====================================
Opciones que tienen todos los campos
====================================
null=True: Permite que los valores puedan ser null.
blank=True: Permite que el campo se pueda quedar en blanco.
blank=True,null=True # Para que de verdad acepte valores en blanco en la base de
datos y en el formulario.
choices=meses: Permite asignar un diccionario de elementos a un objetos para que
los valores solo sean los contenidos en el diccionario. La clave del diccionario
sera lo que se guarda en la base de datos, el valor asociado sera lo que se
mostrar en el formulario que lo use.
db_column: El nombre de la columna donde django guardara el campo, si no se
especifica guarda el nombre del campo.
db_index=True: Sirve para indexar el campo en las búsqueda de django. Por
defecto django busca entre las PK de la base de datos, si añades esto también
buscara entre esos datos y no tendrás que acceder directamente al objeto para
comprobar el campo en las búsquedas.
db_tablespace: El nombre al que se referencia para buscar si ha sido indicado
como index.
default: El valor por defecto que tiene el modelo, si se va a guardar un valor
distinto a vació se guardara con el valor por defecto.
editable=False: Indica si el valor se puede modificar, si es falso no aparecerá
en el admin ni similares.
error_messages={null:"Hay que darle un valor",blank:"No se puede dejar en blanco
",invalid="El valor introducido es erróneo", invalid_choice:"Has escogido un
valor inadecuado", unique="Este valor ya existe"}: Como se ve en el ejemplo
hacer referencia a los mensajes que se mostraran si se produce ese error. No
hace falta crear todos los mensajes. Si no los creas saldrá el que tiene por
defecto.
help_text="Inserta un nombre": Un texto que aparecerá en forma de ayuda en el
campo del formulario.
primary_key=True: Para asignar que el campos es la clave primaria del modelo.
unique=True: Indica que el valor es único, solo podrá haber uno en la base de
datos.
unique_for_date='pub_date': El valor de esta propiedad tendrá que existir como
campo del modelo y tendrá que ser del tipo DateField o DateTimeField. Lo que
hace es no dejar que haya un elemento con el mismo valor del campo y el mismo
día.
unique_for_month='pub_date': El valor de esta propiedad tendrá que existir como
campo del modelo y tendrá que ser del tipo DateField o DateTimeField. Lo que
hace es no dejar que haya un elemento con el mismo valor del campo y el mismo
mes.
unique_for_year='pub_date': El valor de esta propiedad tendrá que existir como
campo del modelo y tendrá que ser del tipo DateField o DateTimeField. Lo que
hace es no dejar que haya un elemento con el mismo valor del campo y el mismo
año.
verbose_name="Nombre de usuario": Nombre del campo comprensible por humanos, si
no se crea django lo generar automáticamente, convirtiendo los guiones en
espacios.
validators=[]: Una lista de validaciones para el campo referencia.
on_delete: Se utiliza para decirle a Django qué hacer con instancias de modelo
que dependen de la instancia de modelo que elimine.
(Por ejemplo, una relación de ForeignKey). El on_delete = models.CASCADE le dice
a Django que coloque en cascada el efecto de supresión, es decir, continúe
eliminando también los modelos dependientes.
user = models.OneToOneField(User, on_delete=models.CASCADE)