Django - 从请求POST方法获取信息

时间:2017-11-22 10:12:15

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

我正在使用带有python 3的requests库。

我的目标是两个步骤:

  1. 将发布请求从python程序发送到我的Django应用程序。
  2. 通过使用在所述Django应用程序中发送的信息创建新的数据库条目来处理发布请求。
  3. 我认为第一部分已正确设置,开发服务器注册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)
    

2 个答案:

答案 0 :(得分:0)

  1. 关于Django Docs的CSRF保护的讨论:https://docs.djangoproject.com/en/1.11/ref/csrf/

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

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

答案 1 :(得分:0)

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

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

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

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

相关问题