Django makes it easier to build better Web apps more quickly and with less code.
¿Que necesitamos?
#!/usr/bin/python
print "Hola mundo"
nombre = "Juan"
edad = 12
peso = 82.5
musica = ("rock", "metal", "clasica")
colores = ["azul", "rojo", "verde"]
usuarios_emails = {
"juan": "juan@gmail.com",
"jorge": "j.torres@gmail.com"
}
def suma(a, b):
return a+b
for i in range(100):
print i
while n > 0:
n = n - 1
if edad > 18:
print "Eres mayor de edad"
else:
print "Lo siento, aun eres un niñato"
Sistema Operativo (GNU/Linux)
Base de Datos
HTTP Server
Python
Virtualenvwrapper
Django 1.6
South
ORM
Templates
Views
Django 1.9
Djanto-Extensions
ORM
Templates
Views
Creando un proyecto
$ django-admin.py startproject mysite
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
Deploy Modo Dev
$ ./manage.py runserver
July 03, 2016 - 01:42:54
Django version 1.9.7, using settings 'mysite2.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Hermosas pantallas de depuración
Aplicaciones
$ python manage.py startapp polls
polls/
__init__.py
admin.py
models.py
tests.py
views.py
Validación
$ python manage.py validate
0 errors found
Migración
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... 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 sessions.0001_initial... OK
Creación Superusuario
$ python manage.py createsuperuser
Username (leave blank to use 'lesthack'): usuario
Email address: lesthack@gmail.com
Password:
Password (again):
Superuser created successfully.
Autenticación
Panel de Administración
models.py
from django.db import models
class encuesta(models.Model):
nombre = models.CharField(max_length=200)
class pregunta(models.Model):
encuesta = models.ForeignKey(encuesta)
pregunta_text = models.CharField(max_length=200)
fecha = models.DateTimeField(auto_now_add = True)
Uso
mipregunta = pregunta.objects.get(id=1)
mipregunta.encuesta.nombre
urls.py
from django.conf.urls import url
from polls import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^otro/$', views.index, name='index')
]
views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hola mundo, estas en la vista index.")
http://localhost:8000/
views.py
def myindex(request):
nombre = 'Jorge Hernandez'
lista = range(0,100)
return render_to_response(
'index.html',
{'nombre': nombre, 'lista': lista},
context_instance=RequestContext(request)
)
templates/index.html
Este es un template
Ejemplo de valor variable: {{ nombre }}
Lista:
{% for elemento in lista %}
- {{ elemento }}
{% endfor %}
admin.py
from django.contrib import admin
from polls.models import *
@admin.register(encuesta)
class encuestaAdmin(admin.ModelAdmin):
list_display = ['id', 'nombre']
list_display_links = ['nombre']
search_fields = ['id', 'nombre']
@admin.register(pregunta)
class preguntaAdmin(admin.ModelAdmin):
list_display = ['id', 'encuesta', 'pregunta_text', 'fecha']
list_display_links = ['id']
search_fields = ['id', 'encuesta', 'pregunta_text', 'fecha']
list_filter = ['fecha']
Django-Suit: Interfaz Moderna (Licencia)
Grappelli: Interfaz Moderna Free
Django-Material: Interfaz Material Design Free
Django Extensions: Plugins Necesarios
Django-CMS: Content Managment
Wagtail: Content Managment
Tastypie: API
Python Social Auth: Autenticación Social
Twitter: @lesthack
Blog: lesthack.com.mx
Email: lesthack@gmail.com
Github: github.com/lesthack