• [Python] [Django] Django将post请求变成get


    [Python] [Django] [Django将post请求变成get的奇妙冒险]

    通过requests库向Django后台服务器发送post请求,请求url如下

    http://10.16.195.51:8000/hsvltnprjct/shutdown
    

    请求方法如下

    import requests
    url = "http://10.16.195.51:8000/hsvltnprjct/shutdown"
    data = {"task_id":"24123-234123-4124312"}
    headers = {"Content-Type":"application/json"}
    requests.post(url=url, headers=headers, data=data)
    

    在服务端一直走get请求逻辑,于是我尝试通过中间件来判断,请求方式

    在中间件最上方加一个中间件,打印request.META,发现会收到两个请求,一个post,一个get。

    然后将中间件方法放在中间件最后,发现只会收到一个get请求。

    说明django服务最开始确实收到了post请求,只不过在中间被重定向为get请求了。

    查阅了一系列完整,发现了django的一个小细节,在url定向的时候,如果末尾不是‘/’,会被系统重定向到带‘/’的url,即301,然后空的请求被重定向,就变成了get。

    比如本来是’/sudoku/‘结果我的目标是’/sudoku’,这就会出问题

    如果还有问题的话 加上装饰器 @csrf_exempt

    django中也有这一点的配置,APPEND_SLASH

    django默认地会将APPEND_SLASH设置为True,也就是任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。

    当 seetings.py 设置为 APPEND_SLASH = False 时,访问 http://example.com/hello 将会返回 404。

    所以我觉得还是按照官方默认开启这个参数方便些,如果不想要后面的 / ,可以在 urls.py 定义成 '^hello$' 这样的形式。

  • 相关阅读:
    apache多端口映射
    mark
    一些注册表值
    jsp URL中文处理的几种方式
    【引用】雨林木风Ghost XP SP3系统
    CentOS常用命令
    查看ie8临时文件夹
    卡塔兰数
    大数问题
    不会做的题目
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/12506955.html
Copyright © 2020-2023  润新知