我需要测试重定向到url是否会导致404错误。django文档中的以下示例:https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#resolve
我设法让下面的人开始工作了。因此,如果redirect_url引发404,我们将用户重定向到主页。
redirect_url = '/blog/hello-world'
view, args, kwargs = resolve()
kwargs['request'] = request
try:
view(*args, **kwargs)
except Http404:
self.message_user(...)
return HttpResponseRedirect('/')但是,我需要测试使用GET参数为?edit的?edit是否也会引发404。因为“编辑”标志用于返回不同的查询集。例如:
if 'edit' in request.GET:
qs = qs.drafts()
else:
qs = qs.public()我修改了我的原始代码:
redirect_url = '%s?edit' % redirect_url
[...]然而,这提高了Resolver404。
这里的完整堆栈跟踪:http://dpaste.com/1DQHH7Q
现在,我的问题是如何使用GET参数测试HTTP404错误?
当我在浏览器中访问url时,路径blog/2015/07/14/sky-limit-only-those-who-arent-afraid-fly/?edit是有效的。它如预期的那样工作。
一个肮脏的解决方案是这样做:
from django.test.client import Client
client = Client()
resp = client.get(redirect_url)
if not resp.status_code == 404:
return HttpResponseRedirect(redirect_url)我真的不想用这个。
发布于 2015-07-15 13:01:57
resolve()方法在不带GET参数的情况下接受url。您可以尝试替换request.GET。
redirect_url = '/blog/hello-world'
view, args, kwargs = resolve()
request.GET = {'edit': ''}
kwargs['request'] = request
try:
view(*args, **kwargs)
except Http404:
self.message_user(...)
return HttpResponseRedirect('/')请注意,request是当前视图的请求对象,因此如果需要实际的request.GET数据,请小心。
https://stackoverflow.com/questions/31430063
复制相似问题