【问题标题】:Django - Obtaining information from Requests POST MethodDjango - 从请求 POST 方法中获取信息
【发布时间】:2017-11-22 21:00:30
【问题描述】:

我在 python 3 中使用requests 库。

我的目标是一个两步过程:

  1. 从 python 程序向我的 Django 应用发送 post 请求。
  2. 通过使用在所述 Django 应用中发送的信息创建一个新的数据库条目来处理该发布请求。

我认为第一部分已经正确设置,开发服务器注册了 POST 请求。但是,我在执行第二步时遇到了一些问题。

我创建了一个特殊的 url 和 html 模板,只是为了查看在我发出 POST 请求后是否有任何东西被拾取。视图以这种方式处理:

    def new_instance(request):
            instance = 'Nothing picked up!'

            if request.method == 'POST':
                    post = request.POST['ID']
                    instance = IDInstance(id=post)
                    instance.save()

            return render(
                    request,
                    'viewpage.html',
                     context = {'instance':instance})

但是,实例变量和我的数据库都没有更新。

正在发出的请求如下所示:

Info = {'ID':'23234234'}
r = requests.post(domain,data=Info)

【问题讨论】:

    标签: python django django-rest-framework django-views python-requests


    【解决方案1】:
    1. 在 Django Docs 上有一个关于 CSRF 保护的讨论:https://docs.djangoproject.com/en/1.11/ref/csrf/

      该页面还包含有关如何覆盖它的信息。我使用了页面上列出的“装饰器方法”,但我建议您阅读该页面并根据您的安全要求决定要使用的机制。

    2. 本地 Node.js 服务器也有类似的问题。使用this Chrome extension 有助于在我的本地系统上修复它。你可以试一试。

    【讨论】:

    • 与其仅链接到文档,不如复制您已链接的文档的相关部分以改进您的答案。
    【解决方案2】:

    您正在做的是有效地创建 API 端点。

    您应该为此 URL 禁用 CSRF 保护,因为您的外部应用程序将没有令牌。这样做很好。

    对于你的第二个问题,目前还不清楚你对什么感到困惑。当然你需要一个视图;由 Django 中的请求触发的任何操作都由视图处理。正如我所提到的,就 Django 而言,由用户在浏览器中提交表单触发的请求与发出直接 HTTP 请求的外部进程之间没有区别。它们的工作方式完全相同。

    在该视图中,您可以通过request.POSTrequest.body 访问数据。

    【讨论】:

    • 感谢您抽出宝贵时间再次回复,我已经更新了问题。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2022-11-17
    • 2016-01-28
    • 2017-10-02
    相关资源
    最近更新 更多