在django中做面向对象的开发, 经常会遇到处理函数中带有get post put delete options head等请求方法, 但当浏览器只支持get和post方法时, 请求就会报错, 此时需要用到django的中间件来解决, 项目下创建一个中间件, 在请求到服务器的过程中, 让中间件进行方法的转化,
以下是中间件的代码:
def process_request(self, request):
method = request.method
#
if 'application/json' in request.META['CONTENT_TYPE']:
#对数据类型的处理
#把客户上传的json转成python字典
data = json.loads(request.body.decode())
elif 'multipart/form-data' in request.META['CONTENT_TYPE']:
#把客户端的formdata上传的数据进行解析, 通常客户端会把上传的文件额放在formdata中,
#所下面的解析会把上传的问卷也解析出来
data, files = MultiPartParser(request.META, request, request.upload_handlers).parse()
else:
data = {}
files=None
#这儿的HTTP_X_METHOD可以自由取名, 是在前端代码中设置的,拿到之后进行判断操作, 其中的.upper()是防止存在小写字母, 一律转成大写, setattr设置属性和值, if files对有涉及文件上传做了判断和处理
if 'HTTP_X_METHOD' in request.META:
method=request.META['HTTP_X_METHOD'].upper()
setattr(request, 'method', method)
if files:
setattr(request, '{method}_FILES'.format(method=method), files)
setattr(request, method, data)
return None
代码中还包括了在django中对数据类型的中间件处理, 例如, django只能解析post上传的formdata,不能解析其他方法上传的json,xml,text格式数据,所以要手动解析上传数据, 此段代码里对两种常用数据类型进行了处理, application/json 和 multipart/form-data , 要注意的一点是: 前端代码中需要指定使用这两种数据类型的任意一种才行.
技术交流可以留言评论哦 ! 虚心学习, 不忘初心, 共同奋进 !