0

我在视图上测试重定向(需要登录)。

测试片段:

...
expected_url = build_url(
    self.login_url,
    get={'next': self.url}
)
self.assertRedirects(
    response,
    expected_url,
    status_code=302
)

我得到AssertionError是因为是百分比编码的,通过( )expected_url显示的一个 django不是百分比编码的。login_requireddjango.contrib.auth.decorators.login_required

所以我得到:

AssertionError: Response redirected to 'http://testserver/log_in/?next=/payments/purchase/'
expected 'http://testserver/log_in/?next=payments%3Apurchase'

我的build_url功能如下所述。我dicturllib.urlencode.

build_url来源:我如何使用 django urlresolvers 反向传递 GET 参数

def build_url(*args, **kwargs):
    get = kwargs.pop('get', {})
    url = reverse(*args, **kwargs)
    if get:
        url += '?' + urllib.urlencode(get)
    return url

问题:

  • 有没有办法告诉 django 显示login_url百分比编码?

  • 我应该改用什么东西来urllib.urlencode从 a 构建一个 urldict吗?

  • 百分比编码很重要,所以我必须遵循它吗?
4

0 回答 0