python - 从单独的 requests.post python 脚本中填写 Django 表单
问题描述
在阅读 Requests 库时,我突然想到我可以尝试使用它来填写表格。所以,由于我有 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 个有趣的问题:
- 当我检查元素时,因为表单是使用 Django 的 ModelForm 创建的,所以我实际上无法为该字段命名(本来应该是名称)和 2。Django 反而用 csrf 令牌值和 3 填充我的名称. 实际上,我看不到 requests.post 是如何按下提交按钮的。
为了成功通过表单发布值,这里缺少什么?
谢谢你
解决方案
在 Django Web 应用程序中,在执行时前端和后端是分开的,并通过 http/https 请求和响应进行通信。前端向用户显示元素,收集输入等,但是为了与后端通信,它从该数据构建一个 POST 请求,并在用户单击提交时发送它。表单本身不会被发送,只是与表单的字段和每个字段中的用户输入相对应的键值对的集合。在后端,数据被传递给表单,以便它可以验证/保存/等。
所以回答你的问题:
1)我不完全确定你在问什么,但重要的是 post 有效负载有一个与相应 Django 表单中的字段名称匹配的键。
2) CSRF 令牌是一种安全措施,您必须在requests.post
通话中手动说明这一点。从禁用它们开始可能会更容易,直到您的帖子正常工作,然后努力让它们正常工作。
3)requests.post
实际上并没有按下提交按钮,您只是在重新创建用户按下提交按钮时由浏览器生成的相同 http 请求。这有意义吗?这是理解的关键点。
最后,为了帮助您找到可行的解决方案,我们需要了解更多。你的表格是什么样的?你的观点是什么样的?
推荐阅读
- python - 在 Bokeh 中创建具有不同大小部分的可调整大小的绘图布局
- android - 如何创建这种类型的 xml 布局
- google-sheets - 处理按日期对行分组的 Google 表格查询导致的空白
- macos - MacOS 10.15 (Catalina) 中的 ASWebAuthenticationSession
- gitlab - gitlab中的快进合并请求
- r - 如何动态添加列对
- macos - 如何在 Mac OS 上检查 CPI(每指令周期数)或 IPC(每周期指令数)?
- django - 无法使用 CentOS 8、Nginx 和 Django-Rest-Framework 在 VirtualBox 上启动 gunicorn.service
- asp.net-mvc - 如何诊断 asp.net mvc 中的 ScriptBundle 错误
- javascript - 使用返回的 JSON 数据更改状态