我希望能够提交一形式中的一个 HTML源(string).换句话说,我至少需要的能力产生后参数 从一个包含的HTML源的形式.这是需要在单元的测试用于一个Django项目。我想一个解决方案,可能的话;

  • 使用的唯一标准蟒蛇图书馆和Django。
  • 允许参数产生从特定形式,如果存在多种形式存在。
  • 允许我改变的价值观之前提交。

一个解决方案,返回(Django)的形式实例,从一定形式的类是最好的。因为这将允许我使用验证。理想的是,它将消耗本来源(这是a string),一种形式课和任选一种形式的名称和返回的实例,因为它是以前呈现。

注:我知道这不是一项容易的任务,和可能的收益将很难辩解的努力需要。但我只是好奇怎么这是可以做到的,在一个实际和可靠的方式。如果可能的。

有帮助吗?

解决方案

你应该重新读的 文件有关决的测试框架, 具体部分有关测试的意见(和形式)与 的测试的客户.

的测试的客户行为作为一个简单的网络浏览器,并且让你做 GETPOST 请求您的决景。你可以阅读响应HTML或得到相同的 Context 目的模板,收到。你的 Context 对象应包含的实际 forms.Form 实例,你要找的。

作为一个例子,如果你看URL /form/ 穿的上下文 {'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 docs约的形式,事实证明,形式是不可变的。这是好的,但是,只要创建一个新的 Form 实例和提交;我已经改变了我的码的例子匹配这一点。

其他提示

由于Django测试框架这样做,我不知道你是什么要求。

你想测试一个Django应用程序,有一种的形式?

  • 在这种情况下,需要做一个初步得到
  • 随后产生的后

你想写(和试验)的一个决程序提交一个形式到另一个网站?

这里就是我们如何测试Django应用程序与形式。

class Test_HTML_Change_User( django.test.TestCase ):
    fixtures = [ 'auth.json', 'someApp.json' ]
    def test_chg_user_1( self ):
        self.client.login( username='this', password='this' )
        response= self.client.get( "/support/html/user/2/change/" )
        self.assertEquals( 200, response.status_code )
        self.assertTemplateUsed( response, "someApp/user.html")

def test_chg_user( self ):
    self.client.login( username='this', password='this' )
    # The truly fussy would redo the test_chg_user_1 test here
    response= self.client.post(
        "/support/html/user/2/change/",
        {'web_services': 'P',
         'username':'olduser',
         'first_name':'asdf',
         'last_name':'asdf',
         'email':'asdf@asdf.com',
         'password1':'passw0rd',
         'password2':'passw0rd',} )
    self.assertRedirects(response, "/support/html/user/2/" )
    response= self.client.get( "/support/html/user/2/" )
    self.assertContains( response, "<h2>Users: Details for", status_code=200 )
    self.assertContains( response, "olduser" )
    self.assertTemplateUsed( response, "someApp/user_detail.html")

注意到-我们不分析HTML详细说明。如果有合适的模板,并有权应string,它是正确的。

它是简单的...并努力在同一时间。
免责声明:我不知道很多关于蟒蛇并没有在所有有关决...所以我给大、语言无关的建议...如果一个以上的建议不为你工作,你可能要做手动:

  • 载的网页有一个HTML分析器,清单的形式。
  • 如果的 method 属性员额(不敏感情况下),得到的 action 属性,获得网址的请求(可以相对)。
  • 在形式,得到所有 inputselect 标记。的 name (或 id 如果没有名称的)属性是关键的请求的参数。的 value 属性(如果空缺席)的相应的价值。
  • 对于 select, ,值是一个选择的 option 或者所显示的文字是没有 value 属性。

这些名称和价值观必须URL encoded在得到请求,但不在员额的人。

禾田.

检查了 机械化 或者是包装纸 斜纹.我认为这是 ClientForm 模块将会为你工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top