当浏览器不支持get和post以外的请求方法时,django中的解决办法

  在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 , 要注意的一点是: 前端代码中需要指定使用这两种数据类型的任意一种才行.


技术交流可以留言评论哦 ! 虚心学习, 不忘初心, 共同奋进 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值