Django – Inicio de Proyectos
Git tips
git clone [--recurse-submodules[=<pathspec>]] <repository> [<directory>]
git clone --recurse-submodules <repository>
git remote add name <repository>
git remote add upstream <repository>
git submodule add <repository> [<directory>]
git submodule init
git submodule update
git submodule update --remote [<directory>]
git submodule update --remote --merge
git submodule foreach git pull origin main
git submodule foreach git pull upstream main
git push --recurse-submodules=check
git push --recurse-submodules=on-demand
Iniciando el proyecto…
Creación de proyectos:
django-admin startproject nombre_proyecto [directorio]
django-admin startproject nombre_proyecto .
Correr el servidor:
python3 manage.py runserver
Creación de apps:
python manage.py startapp nombre_app [directorio]
python manage.py startapp nombre_app
# settings.py
INSTALLED_APPS: [
...
'nombre_app'
...
]
URLs y vistas
Vistas:
# app/views.py
from django.http import
HttpResponse, HttpResponseNotFound, HttpResponseRedirect
from django.urls import reverse
def fn_view(request):
...
return HttpResponse("text")
def fn_view(request, param1):
...
return HttpResponseNotFound("text")
return HttpResponseRedirect("url_2_redirect_2")
return HttpResponseRedirect(reverse("path_name_2", args = [param1, ]))
return HttpResponseRedirect(reverse("path_name_2", kwargs = {'param1': param1, }))
URLs:
# app/urls.py
from django.urls import path
from . import views
urlpatterns = [
...
path("parte-ruta/", views.fn_view, name="path_name"),
path("parte-ruta/<param1>/", views.fn_view_2, name="path_name_2"),
path("parte-ruta/<tipo:param1>/", views.fn_view_2, name="path_name_2"),
...
]
Tipos de parámetros:
Convertidores de ruta
- str
- int
- slug
- uuid
- path
Convertidores personalizados
La clase debe incluir un atributo string regex un método to_python(self, value) que convierte la cadena en el tipo que se enviara a la función de vista, un método to_url(sefl, value) que convierte el parámetro en una cadena que será empleada en la URL.
class FourDigitYearConverter:
regex = "[0-9]{4}"
def to_python(self, value):
# Lanza ValueError si no
# se puede convertir el
# valor, en consecuencia
# se lanza un response 404
return int(value)
def to_url(self, value):
# Lanza ValueError si no
# se puede convertir el
# valor, que es
# interpretado como
# no-match y reverse()
# lanza NoRevserseMatch
return "%04d" % value
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.FourDigitYearConverter, "yyyy")
urlpatterns = [
path("articles/2003/", views.special_case_2003),
path("articles/<yyyy:year>/", views.year_archive),
...,
]
Expresiones Regulares
from django.urls import re_path
from . import views
urlpatterns = [
...
re_path(
r"^articles/(?P<param1>regex)/$",
view_fn),
re_path(
r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$",
views.month_archive),
re_path(
r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$",
views.article_detail,
),
]
# projecto/urls.py
from django.urls import path, include
urlpatterns = [
...
path("modulo-ruta/", include("app/urls")),
...
]
