在讲这个问题前我们先看一下前端传递参数时主要有哪些格式
POST请求:
1. Content-Type:application/json or text/plain or text/xml 参数在: request.body中
2. 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