Django 获取前端POST请求传递的不同格式的参数

912 阅读1分钟

在讲这个问题前我们先看一下前端传递参数时主要有哪些格式

POST请求:
1. Content-Type:application/json or text/plain or text/xml 参数在: request.body2. form-data表单数据, 参数在request.POST
3. x-www-form-urlencoded, 参数在:request.POST

由此我们可以知道,我们需要获取的参数不是在request.body中就是在request.POST中,因此我们只要使用一个中间件将数据处理一下,这样我们就可以不区分前端的请求格式直接取到数据

编写中间件处理前端请求的数据

步骤1:编写中间件
from django.utils.deprecation import MiddlewareMixin
import json


class RequestMiddlewareMixin(MiddlewareMixin):
    def process_request(self, request):
        '''
            将POST请求中,不同的请求方式数据统一到 request.data中
        '''
        if request.method == 'POST':
            try:
                request.data = json.loads(request.body)
            except Exception as e:
                request.data = request.POST
步骤2:注册中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'apps.user.CustomMiddlewareMixin.RequestMiddlewareMixin' # 将中间件添加至中间件列表中
]
注意要点

注册中间件时最好导下包以免中间件路径错误,如下面的导包路径前后拼接起来就是中间件的路径了 from apps.user.CustomMiddlewareMixin import RequestMiddlewareMixin