recuperar datos
Parámetros de empalme de URL
request.GET.get('键') # 获取单个值,get('键',默认值)
request.GET.getlist('键') # 获取多个值,getlist('键',默认值)
Formulario
request.POST.getlist('键')
Datos que no son de formulario
json.loads(request.body) # 直接获取请求体,再转化为字典
Solicitar encabezados
request.META['CONTENT_TYPE']
Encabezados de solicitud comunes:
CONTENT_LENGTH: la longitud del cuerpo de la solicitud (como una cadena).
CONTENT_TYPE: el tipo MIME del cuerpo de la solicitud.
HTTP_ACCEPT: tipos de contenido aceptables para la respuesta.
HTTP_ACCEPT_ENCODING: codificaciones aceptables para la respuesta.
HTTP_ACCEPT_LANGUAGE: idiomas aceptables para la respuesta.
HTTP_HOST: el encabezado del host HTTP enviado por el cliente.
HTTP_REFERER: la página de referencia, si existe.
HTTP_USER_AGENT: la cadena de usuario-agente del cliente.
QUERY_STRING: la cadena de consulta, como una sola cadena (sin analizar).
REMOTE_ADDR: la dirección IP del cliente.
REMOTE_HOST: el nombre de host del cliente.
REMOTE_USER: el usuario autenticado por el servidor web, si lo hay.
REQUEST_METHOD: una cadena como "GET" o "POST".
SERVER_NAME: el nombre de host del servidor.
SERVER_PORT: el puerto del servidor (como una cadena).
Otros atributos comunes del objeto HttpRequest
método: una cadena que indica el método HTTP utilizado para la solicitud. Los valores comunes incluyen: 'GET', 'POST'.
usuario: el objeto de usuario solicitado.
ruta: una cadena que representa la ruta completa de la página solicitada, excluyendo el nombre de dominio y la parte del parámetro.
codificación: una cadena que representa el método de codificación de los datos enviados.
如果为None则表示使用浏览器的默认设置,一般为utf-8。
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任 何访问将使用新的encoding值。
ARCHIVOS: un objeto similar a un diccionario que contiene todos los archivos cargados.
Devolver datos
HttpResponse
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
Django proporciona una serie de subclases de HttpResponse, que pueden establecer rápidamente el código de estado
- HttpResponseRedirect 301
- HttpResponsePermanentRedirect 302
- HttpResponseNotModified 304
- HttpResponseBadRequest 400
- HttpResponseNotFound 404
- HttpResponseForbidden 403
- HttpResponseNotAllowed 405
- HttpResponseGone 410
- HttpResponseServerError 500
JsonResponse
Devuelve datos json, convierte automáticamente el diccionario a una cadena json
from django.http import JsonResponse
def response(request):
return JsonResponse({'city': 'beijing', 'subject': 'python'})
redireccionar
from django.shortcuts import redirect
def response(request):
return redirect('/get_header')
análisis inverso
Cuando la página se salta con frecuencia, la dirección se puede obtener dinámicamente.
Enrutamiento total
Utilice el espacio de nombres para crear alias de sub-aplicaciones
# path('',include(('子应用.urls','子应用名'),namespace='别名'))
path('',include(('request_response.urls','request_response'),namespace='request_response'))
Sub-aplicación
Alias de las subrutas de las sub-aplicaciones
path('indexhaha/',views.IndexView.as_view(),name='index')
Vista
Utilice el alias de la ruta para resolver dinámicamente la dirección real de la ruta
# ret_url = reverse('子应用名:子路由名')
ret_url = reverse('request_response:index')
return redirect(ret_url)
Definición y uso de middleware
Django preselecciona seis métodos en el middleware, que se ejecutarán automáticamente en diferentes etapas para intervenir en la entrada o salida.
- Método de inicialización:
Inicie el programa Django y llame automáticamente una vez al inicializar el middleware para determinar si habilitar el middleware actual.
def __init__(self, get_response=None):
pass
2. El método antes de procesar la solicitud: (importante)
Antes de procesar cada solicitud, se llama automáticamente y devuelve el objeto None o HttpResponse
def process_request(self, request):
pass
3. El método antes de procesar la vista: (importante)
Antes de procesar cada vista, se llama automáticamente y devuelve el objeto None o HttpResponse
def process_view(self, request, view_func, view_args, view_kwargs):
pass
4. El método antes de procesar la respuesta de la plantilla:
Antes de procesar cada respuesta de plantilla, se llama automáticamente y se devuelve al objeto de respuesta que implementa el método de representación.
def process_template_response(self, request, response):
pass
5. El método después de procesar la respuesta: (importante)
Antes de que cada respuesta se devuelva al cliente, se llama automáticamente y devuelve el objeto HttpResponse
def process_response(self, request, response):
pass
6 Manejo de excepciones:
Cuando la vista arroja una excepción, se llama automáticamente y devuelve un objeto HttpResponse
def process_exception(self, request,exception):
pass
Caso de estudio
Definir middleware
El archivo mymiddleware se puede crear en el directorio del proyecto
# 导入中间件的父类
from django.utils.deprecation import MiddlewareMixin
class TestMiddleware1(MiddlewareMixin):
"""自定义中间件"""
def process_request(self, request):
"""处理请求前自动调用"""
print('process_request1 被调用')
def process_view(self, request, view_func, view_args, view_kwargs):
# 处理视图前自动调用
print('process_view1 被调用')
def process_response(self, request, response):
"""在每个响应返回给客户端之前自动调用"""
print('process_response1 被调用')
return response
Registrar middleware
MIDDLEWARE = [
'book.middleware.TestMiddleware1', # 添加中间件
]
Definir la vista
def middleware(request):
print('view 视图被调用')
return HttpResponse('OK')
Orden de ejecución
Antes de que se procese la función de vista, el middleware se ejecuta secuencialmente de arriba a abajo
Después de que se procesa la función de vista, el middleware se ejecuta secuencialmente de abajo hacia arriba