从单独的requests.post python scrip中填写Django表单

2024-04-19 20:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在阅读有关请求库的信息时,我突然想到可以尝试使用它来填充表单。所以,因为我有Django和服务器,我首先检查了我得到的网址,并得到了一个200的答案代码

像这样:

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

是的,是200

所以下一步是在textfield中输入一个值,实际上是表单,对于这个例子,它只是一个字段

我试过这个:

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

什么也没有输入。这里我有三个有趣的问题:

  1. 当我检查元素时,因为表单是使用Django的ModelForm创建的,所以实际上我不能给字段一个名称(应该是name),而是2.Django用csrf标记值和3填充名称。实际上,我看不到requests.post如何按下submit按钮

为了成功地通过表单传递值,这里缺少什么

谢谢


Tags: django答案代码nameimport服务器名称信息
1条回答
网友
1楼 · 发布于 2024-04-19 20:57:38

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

所以要回答你的问题:

1)我不完全确定您要问什么,但重要的是post负载有一个与相应Django表单中字段名称匹配的键

2)CSRF令牌是一种安全措施,您必须在requests.post调用中手动说明这一点。从禁用它们开始可能更容易,直到你让你的帖子工作,然后让它们工作

3)requests.post实际上并没有按submit按钮,您只是在重新创建用户按submit按钮时由浏览器生成的相同http请求。这有道理吗?这是需要理解的关键点

最后,为了帮助您找到有效的解决方案,我们需要了解更多。你的表格是什么样子的?你的观点是什么样的

相关问题 更多 >