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")),
    ...
]