从单独的request.post python脚本填充Django表单

时间:2018-07-13 13:55:48

标签: python django

在阅读有关请求库的信息时,我想到可以尝试使用它来填写表格。因此,由于我拥有Django和服务器,因此我首先检查了URL是否正确以及200个答案代码。

像这样:

import requests
r = requests.get('127.0.0.1/myform')
print(r.status_code)

是的,那是200

因此,下一步将是在文本字段中输入一个值,实际上是表单,在此示例中只是一个字段。

我尝试过:

r = requests.post('127.0.0.1/myform', data ={'name' : 'Mexico'})

,没有输入任何内容。在这里,我有3个有趣的问题:

  1. 当我检查元素时,因为表单是使用Django的ModelForm创建的,所以我实际上无法为字段指定名称(该名称将为name)和2。Django而是用csrf令牌为我填充了名称值和3.实际上,我看不到request.post如何按下提交按钮。

为了成功通过表单发布值,这里缺少什么?

谢谢

1 个答案:

答案 0 :(得分:1)

在Django Web应用程序中,在执行时,前端和后端是分开的,并通过http / https请求和响应进行通信。前端向用户显示元素,收集输入等,但是为了与后端进行通信,前端从该数据构建一个POST请求,并在用户单击Submit时将其发送。不发送表单本身,而只是发送对应于表单字段和每个字段中的用户输入的键值对的集合。在后端将数据传递到表单,以便可以验证/保存/等。

所以回答您的问题:

1)我不确定您要问的是什么,但重要的是邮政有效载荷具有与相应Django表单中的字段名称匹配的键。

2)CSRF令牌是一种安全措施,您必须在requests.post调用中手动进行说明。从禁用它们开始比较容易,直到您开始撰写文章然后再继续使它们工作为止。

3)requests.post实际上并没有按下提交按钮,您只是重新创建了当用户按下提交按钮时浏览器生成的http请求。这有意义吗?这是要理解的关键点。

最后,为了帮助您找到可行的解决方案,我们需要了解更多。您的表格是什么样的?您的视图长什么样?