当前位置: 首页 > 面试题库 >

Django:测试页面是否已重定向到所需的URL

施越彬
2023-03-14
问题内容

在我的django应用中,我有一个身份验证系统。因此,如果我没有登录并尝试访问某些个人资料的个人信息,则会被重定向到登录页面。

现在,我需要为此编写一个测试用例。我得到的浏览器的响应是:

GET /myprofile/data/some_id/ HTTP/1.1 302 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 301 0
GET /account/login?next=/myprofile/data/some_id/ HTTP/1.1 200 6533

我该如何编写测试?这是我到目前为止所拥有的:

self.client.login(user="user", password="passwd")
response = self.client.get('/myprofile/data/some_id/')
self.assertEqual(response.status,200)
self.client.logout()
response = self.client.get('/myprofile/data/some_id/')

接下来可能会发生什么?


问题答案:

Django 1.4:

https://docs.djangoproject.com/zh-
CN/1.4/topics/testing/#django.test.TestCase.assertRedirects

Django 2.0:

https://docs.djangoproject.com/zh-
CN/2.0/topics/testing/tools/#django.test.SimpleTestCase.assertRedirects

SimpleTestCase.assertRedirects(response, expected_url, status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)

断言响应返回 STATUS_CODE 重定向状态,重定向到 expected_url (包括任何 GET
的数据),而最后一页用收到 target_status_code

如果您的请求中使用的 跟踪 参数, expected_urltarget_status_code
将是重定向链的最终点的网址和状态代码。

如果 fetch_redirect_responseFalse ,则不会加载最后一页。由于测试客户端无法获取外部URL,因此如果
Expected_url 不是Django应用程序的一部分,则这特别有用。

在两个URL之间进行比较时,可以正确处理方案。如果在我们重定向到的位置中未指定任何方案,则使用原始请求的方案。如果存在,
expected_url中 的方案就是用来进行比较的方案。



 类似资料:
  • 当有人试图访问需要身份验证的页面时,会重定向到登录页面。如何在成功登录后将它们重定向到所需页面,而不是默认链接?

  • 页面重定向在Web应用程序有很多原因是必要的。您可能希望将用户重定向到另一个页面,当一个特定的动作发生,或者有错误的情况下。例如,当用户登录网站,他经常被重定向到他的主页或个人的仪表板。在Django中,定向使用“redirect”的方法来实现。 在“redirect”方法需要作为参数:URL要被重定向到的字符串的视图名字。 myapp/views 到现在为止如下所示 − 让我们修改hello,以

  • 问题内容: 如何在Django中完成简单的重定向(例如,在ColdFusion中或header()对于PHP)? 问题答案: 这很简单: 官方Django文档中的更多信息 更新:Django 1.0 显然,现在使用,在Django中有一种更好的方法。 范例 通用视图文档中还有更多内容。信贷卡尔斯Barrobés。 更新#2:Django 1.3+ 在Django 1.5中,redirect_to不

  • 我正在尝试将所有流量重定向到安全页面。我尝试使用PHP重定向和htaccess重定向。他们成功了,但问题是我得到了以下错误: "您试图访问domain.com,但实际上您访问了一个自称为www.domain.com.的服务器。这可能是由于服务器配置错误或更严重的原因造成的。您网络上的攻击者可能正试图让您访问假(且可能有害)版本的domain.com." 我们是同一个域。如何解决SSL证书适用于一个

  • 我是Spring的新手。我正在创建一个spring mvc应用程序。我有一个管理员url“/admin/”。如果我使用用户凭据和角色_ADMIN登录,那么我可以访问管理员页面。现在,这个场景运行良好。但如果我没有使用角色_ADMIN登录,并且我尝试访问/ADMIN/url,Spring Security性会将我重定向到/login页面。 这里我不想向外界公开 /admin/(或管理员url存在)u

  • 问题内容: 我做了一个新的吊舱并将其推到行李箱。它出现在cocoadocs(http://cocoadocs.org/docsets/KeyboardLayoutHelper/0.0.1/)页面中,但是http://cocoapods.org/pods/KeyboardLayoutHelper重定向到github。 与一起安装时,吊舱可以正常工作。 我做错了什么还是应该提交给cocoapods.o