[Notas] Django Django inicio rápido Sección 4: Formularios y vistas genéricas
Notas sobre los documentos oficiales y blog de tecnología , información clave extracto, y las notas de registro, ver las rutinas de documentación oficial.
Documento oficial completa: Django Documentación
Blog recomendado: Django2.2 Tutorial
Django Introducción documento oficial: Parte 4: Los formularios y las vistas genéricas
directorio
2. Vista general de: reducir la duplicación de código
1. Formulario Formulario
Para el archivo de plantilla, señala :
- forma de etiqueta en, la acción es la URL de destino que desea enviar, método representa la presentación de los datos, normalmente enviar y obtener. Cuando es necesario cambiar la forma de crear un conjunto de datos del lado del servidor, utilice el método = "post"
forloop.counter
Indicandofor
etiqueta ha ciclado muchas veces . forloop.counter es un sistema de plantillas de Django variables especialmente previsto para indicar el número de su ciclo actual, el ciclo se utiliza generalmente para añadir elementos ordenados escala logarítmica.- Cuando se crea un formulario de envío (que tiene el efecto de la modificación de datos), tiene que ser a través del sitio de cuidado falsificación solicitud, se hace referencia a CSRF. Django tiene una defensa a su sistema muy fácil de usar. En resumen, toda la dirección URL interna de la forma de POST debe utilizar etiquetas de plantilla
{% csrf_token %}
. (Nombre de la etiqueta no se puede cambiar, de formato fijo, en cualquier posición, siempre y cuando el formulario está en la forma. Este método es conveniente formulario de presentación Haoshi en la forma de la forma, pero si es la presentación de los datos usando ajax manera, entonces no utilice este método tiene.)
datos de formulario enviado se procesa en la vista, ver los puntos :
-
request.POST
Es un diccionario-como objeto que permite el acceso al nombre de la clave de datos presentado. Por ejemplorequest.POST['choice']
en una cadena de retorno selección de ID de elección. Nota:request.POST
El valor es siempre una cadena. -
Django también en la misma forma establecida
request.GET
para acceder a datos GET. -
Si
request.POST['choice']
no proporciona los datoschoice
, la POST conducir a unaKeyError
. PS: Por lo general, nos dan un valor predeterminado, para evitar que esa excepción, por ejemplorequest.POST[’choice’,None]
, una Ninguno resuelve todos los problemas. -
HttpResponseRedirect
Recepción de un solo parámetro : el usuario será redirigido a la URL de . Nota: Después de procesar con éxito de los datos POST, se debe mantener un buen hábito, siempre devuelve un HttpResponseRedirect. Tales como:return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
-
reverse()
Función. Esta función nos evita URL modificable en función de la vista. Nos obliga a dar el nombre de la vista que desea saltar y patrón de URL correspondiente a la vista de la necesidad de proporcionar una visión de los parámetros ( datos que se pasan ) . (Por ejemplo: después de código de redirección anteriormente en lapolls:results
vista correspondiente , yquestion.id
pasarlo a los términos vernáculos, es lanzar, además, una vista en vivo correspondiente a la ruta para llegar allí ..)
2. Vista general de: reducir la duplicación de código
El desarrollo web es una situación común:
- Obtener datos de la base de datos de acuerdo a los parámetros de la URL,
- Cargar el archivo de plantilla,
- Sólo tiene que utilizar los datos para hacer una plantilla, vuelva a esta plantilla.
Debido a esta situación es particularmente común, Django provee un acceso directo, llamado el " vistas genéricas del sistema".
El código original en lugar de utilizar un modo de vista común , que hay que hacer para completar la conversión de los siguientes pasos:
- La conversión de la URLconf .
- Borre parte de la vieja visión ya no es necesaria.
- La nueva vista se introduce sobre la base de una visión común de Django .
(Nota: En el desarrollo debe comenzar a determinar si el uso de puntos de vista genérico, en lugar de a mitad de camino reconstituidas)
Necesitará importar las vistas genéricas:
de django.views importar genéricos
Vista general :( ya que se heredan de la clase padre)
ListView
: Significa "muestra una lista de objetos." ListView vista genérica utiliza una plantilla llamada por defecto del atributo se utiliza para especificar el nombre de la plantilla.<app name>/<model name>_list.html。template_name
DetailView
: Es sinónimo de "página de detalles de un tipo particular de objeto". Por defecto, la DetailView
opinión general es que se refiere al uso de una <app name>/<model name>_detail.html
plantilla (por ejemplo: encuestas / detail.html ). template_name
Atributo se utiliza para especificar el nombre de la plantilla en lugar del nombre de la plantilla por defecto se genera de forma automática.
class DetailView(generic.DetailView):
model = Question
template_name = 'polls/detail.html'
- Cada vista genérica necesita saber cuál es el modelo que va a actuar. Esto se realiza
model
proporcionando propiedad. DetailView
Captura de llamada esperar de una URL"pk"
valor de la clave primaria. (Así, por ejemplo, la opinión general dequestion_id
cambiopk
).
vista de clase es un uso más avanzado de Django, hay una primera impresión. Más información detallada sobre las vistas genéricas, ver las vistas genéricas de documentos .