Django 关于@login\u必需的装饰器和重定向类型的问题
默认情况下,当使用Django 关于@login\u必需的装饰器和重定向类型的问题,django,seo,Django,Seo,默认情况下,当使用@login\u required装饰器时,Django在将未经身份验证的用户重定向到登录页面时执行302(临时)重定向。我与一家搜索引擎优化公司合作(我自己对这个话题一无所知),他坚持301(永久)重定向对他正在做的工作至关重要 在使用@login_required decorator时,有没有强制Django执行301重定向 再次感谢 使用 ,而 其中 因此,不能仅使用login\u required更改重定向类型。您可以编写自己的login\u所需的decorato
@login\u required
装饰器时,Django在将未经身份验证的用户重定向到登录页面时执行302(临时)重定向。我与一家搜索引擎优化公司合作(我自己对这个话题一无所知),他坚持301(永久)重定向对他正在做的工作至关重要
在使用@login_required decorator时,有没有强制Django执行301重定向
再次感谢 - 使用
- ,而
- 其中
- 李>
因此,不能仅使用
login\u required
更改重定向类型。您可以编写自己的login\u所需的decorator来提供301重定向(尽管在这里使用它是有争议的) 所需的@login\u
装饰程序使用重定向\u至登录视图,该视图返回DjangoHttpResponseRedirect
对象以将用户重定向到登录页面。正如您所提到的,这个对象表示302重定向。还有一个可供选择的重定向对象,HttpResponsePermantRedirect
,不过您需要编写自己的decorator来使用它
当然,编写自己的装饰程序是可能的。但在我看来,这是一种不好的做法。这不仅是因为它将您的应用程序绑定到身份验证模块的特定实现,还因为302重定向实际上是在这种情况下使用的正确重定向
事实上,页面并没有“永久移动”。相反,用户只需在再次访问同一URL之前对自己进行身份验证。因此,重定向不是永久性的,因为页面实际上没有“移动”。301永久重定向在这里似乎是错误的。假设您正在保护URL/secret sail/recipe
。如果我没有登录并点击/secret saint/recipe
,那么我应该被重定向到登录页面。但这一页并没有永久移动/secret saint/recipe
仍然是一个有效的URL(我登录后应该会被重定向回该URL)。301在页面移动且在旧URL无效时使用。典型的SEO专家:不知道他在说什么…:-)顺便说一句,浏览器通常会缓存这些永久重定向。因此,在这种情况下,permenent_重定向可能会在用户浏览器中出现重定向循环。