python——django的post请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python——django的post请求相关的知识,希望对你有一定的参考价值。

  两次被同一块石头绊倒简直不可原谅!第一次写django程序的时候,就因为ajax post请求折腾了整整一天,时隔两个多月昨天又被虐一整晚。叔可忍婶儿也不能忍了!!!重要的事情写下来,为以后轻松碾压post请求做准备。

django post请求403:

  当采用客户端象django的服务器提交post请求时。会得到403,权限异常。因为django针对提交的请教,有校验。所以会如此。

  处理过程

  按提示及百度结果修改setting.py,在MIDDLEWARE_CLASSES增加django.middleware.csrf.CsrfResponseMiddleware。结果依然报错。
 
  继续修改setting.py,注释掉django.middleware.csrf.CsrfViewMiddleware及django.middleware.csrf.CsrfResponseMiddleware后,结果依然报错。
 
  继续百度发现各种说法都有,有说在模板文件里加{% csrf_token %}就可以解决的,也有说在setting里加了django.middleware.csrf.CsrfResponseMiddleware就可以解决的,我最后是这样解决的:
  导入模块:from django.views.decorators.csrf import csrf_exempt

  在接收post请求的函数前面添加修饰器:@csrf_exempt

django post请求urls.py文件的配置:

  前一直用get请求,我是这样配url的url(‘^addIp/‘, view.addIpInfo),后来换了POST请求,发现根本接收不到数据,查来查去都查不到原因,后来仔细比对了当时的代码才发现应该是这么配的url(‘^addIp$‘, view.addIpInfo),从网上查看了资料和解释,才想起之前看过的,这里的url匹配是使用正则表达式匹配的,如果不写$,默认只会匹配到addIp,但是其实这后面还有post请求的数据呢。当然匹配不到啦,永远报500~~~

完整的post用例:

  js-ajax:  

    $.ajax({
                 type: "POST",
                 url: "/addIp",
                 data: postData,
                 success: function(data){
                       console.info(data);
                 },
                 error: function(XMLHttpRequest, textStatus, errorThrown){
                     console.info(XMLHttpRequest,textStatus,errorThrown)
                      this;
                 },
                 complete: function(XMLHttpRequest, textStatus){
                     console.info("complete");
                     this;
                 },
            });

  urls.py: 

    url(‘^addIp$‘, view.addIpInfo)

  python——addIpInfo方法:

    from django.http import HttpResponse
    from django.views.decorators.csrf import csrf_exempt
    @csrf_exempt
    def addIpInfo(request):
        additem = request.POST
        print additem
        return HttpResponse(‘ok‘)

参考资料:

    django中“url映射规则”和“服务端响应顺序”:http://www.cnblogs.com/edisonfeng/p/3755136.html

以上是关于python——django的post请求的主要内容,如果未能解决你的问题,请参考以下文章

Python学习---Django关于POST的请求解析源码分析

Python Django之GET请求和POST请求及响应处理

3.Python Django之GET请求和POST请求及响应处理

python Django post方法报错

python--django之视图函数

Django 详解 信号Signal