Python Django-从HttpResponse对象检索url?
在Django测试用例中,如何从Python Django-从HttpResponse对象检索url?,python,django,Python,Django,在Django测试用例中,如何从HttpResponse对象获取url 如果我有以下Django应用程序: url.py views.py tests.py 单元测试失败,并显示以下消息: AttributeError:'HttpResponse'对象没有属性“url” 是否有任何方法可以让客户端返回响应对象,而不是HttpResponse?来自上面给出的代码和您的注释,您的注释表明,如果用户经过身份验证,则试图将其重定向到主页。在上面的代码中,如果有人正在访问/httpresponse,那么您
HttpResponse
对象获取url
如果我有以下Django应用程序:
url.py
views.py
tests.py
单元测试失败,并显示以下消息:
AttributeError:'HttpResponse'对象没有属性“url”
是否有任何方法可以让客户端返回
响应
对象,而不是HttpResponse
?来自上面给出的代码和您的注释,您的注释表明,如果用户经过身份验证,则试图将其重定向到主页。在上面的代码中,如果有人正在访问/httpresponse
,那么您只是在呈现一个模板(返回httpresponse
)
HttpResponse
对象没有url
属性。现在,如果您要对所编写的视图使用login\u required
decorator,它会将未经身份验证的
用户重定向到登录页面。在这种情况下(redirect
),将返回一个HttpResponseRedirect
实例,该实例实际上具有url
属性
Django源代码:
因此,要测试经过身份验证的用户在访问singup时是否被重定向到主页视图,您应该首先为经过身份验证的用户设置重定向。然后您应该能够访问响应的
url
属性。我认为您无法从响应对象获取url,尽管您可以从请求获取url。但我很难理解你为什么要这么做。URL属于请求,而不是响应。Django使用它在urls.py
中查找您想要运行哪个代码来生成HttpResponse
对象,当它得到这个对象时,它会在后台将其转换为实际的HTTP响应以发送回客户机。响应与原始请求所指向的URL无关。不确定要测试什么。HTTP响应通常没有URL,它返回您请求的URL的内容。在浏览器中,HTTP原始响应没有URL部分。因此HttpResponse
对象也没有url
属性。人们可能想测试的是是否有任何重定向。但是,您的响应将具有不同的状态代码(例如301或302),并且响应实际上具有url
属性。@dirkgroten感谢您的回复。如果用户已通过身份验证,并且他们试图访问注册
页面,我会将他们重定向到主页
。我尝试使用response=self.client.get(…)
和self.assertRedirects(response,home)
为此编写一个单元测试,但它不断地给我上述错误templaterresponse
和HttpResponse
对象可以从self.client.get返回,并且它们没有url
参数。将follow=True
选项添加到get()
调用中。这将遵循重定向,然后self.assertRedirects(响应,主页)
也会起作用。
from django.urls import path
from . import views
urlpatterns = [
path('httpresponse/', views.http_response, name='http_response'),
]
from django.shortcuts import render
def http_response(request):
return render(request, template_name='home.html')
from django.test import TestCase
from django.urls import reverse
http_response = reverse('http_response')
class TestTemplateResponse(TestCase):
def test_http_response(self):
response = self.client.get(http_response)
self.assertEqual(response.url, http_response)