Procesamiento de datos Django-08 (adquisición, devolución)

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.

  1. 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

Supongo que te gusta

Origin blog.csdn.net/weixin_47761086/article/details/115378175
Recomendado
Clasificación