python - 如何提交仅给出 HTML 源的表单?

标签 python django testing parsing form-submit

我希望能够在 HTML 源(字符串) 中提交表单。换句话说,我至少需要能够从包含表单 HTML 源的字符串生成 POST 参数。这在 Django 项目的单元测试中是必需的。我想要一个可能的解决方案;

  • 仅使用标准 Python 库和 Django。
  • 如果存在多个表单,则允许从特定表单生成参数。
  • 允许我在提交前更改值。

从给定表单类返回 (Django) 表单实例的解决方案是最好的。因为它允许我使用验证。理想情况下,它将使用源(它是一个字符串)、一个表单类和一个可选的表单名称,并返回呈现之前的实例。

注意:我知道这不是一项容易的任务,而且所获得的 yield 可能不足以抵消所需的努力。但我只是好奇如何以实用可靠的方式做到这一点。如果可能的话。

最佳答案

您应该重新阅读 documentation about Django's testing framework ,特别是关于使用 the test client 测试 View (和表单)的部分.

测试客户端充当一个简单的 Web 浏览器,并允许您向 Django View 发出 GETPOST 请求。您可以阅读响应 HTML 或获取模板收到的相同 Context 对象。您的 Context 对象应该包含您要查找的实际 forms.Form 实例。

例如,如果您在 URL /form/ 处的 View 将上下文 {'myform': forms.Form()} 传递给模板,您可以以这种方式进行:

from django.test.client import Client
c = Client()

# request the web page:
response = c.get('/form/')

# get the Form object:
form = response.context['myform']

form_data = form.cleaned_data
my_form_data = {} # put your filled-out data in here...
form_data.update(my_form_data)

# submit the form back to the web page:
new_form = forms.Form(form_data)
if new_form.is_valid():
    c.post('/form/', new_form.cleaned_data)

希望这能完成您想要的,而不必费心解析 HTML。

编辑:在我重新阅读有关表单的 Django 文档后,发现表单是不可变的。不过没关系,只需创建一个新的 Form 实例并提交即可;我更改了我的代码示例以匹配此内容。

关于python - 如何提交仅给出 HTML 源的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343622/

相关文章:

android - 仪表:控制生命周期

python - Python 的 dir() 函数代表什么?

python - scikit-learn 中纵向/面板数据的交叉验证

python - Django Sendgrid 身份验证错误

javascript - 当我的导航栏折叠时如何使按钮起作用?

python - 使用python脚本远程访问Django中的sqlite3

ruby-on-rails-3 - 如何使用 ActiveSupport 中的 Pending 模块

testing - 在集成测试中, cargo 测试无法引用目标 crate 内的任何公共(public)元素。单元测试也找不到测试用例

python - 在 Windows 上安装 Django

python - 更改 Python 交互提示 ">>>"