我有一个auth系统和django-allauth个库,我有一些登录,注销功能实现,它工作得很好.但我想实现我自己的个人资料页面.对于这一点,我对Django重定向非常困惑.

我有一个名为HomeRequestHandler的基于类的视图,它继承了一个LoginRequiredMixin:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView


class HomeRequestHandler(LoginRequiredMixin, TemplateView):
    template_name = "home.html"

在我的URL中,我只将其调用为"":

from django.views.generic import TemplateView
from django.urls import path
from . import views

urlpatterns = [
    path("", views.HomeRequestHandler.as_view(), name="home"),
    path("profile/", TemplateView.as_view(template_name="account/profile.html"), name="profile"),
]

在我的settings.py,我有一个LOGIN_REDIRECT_URL的常量:

LOGIN_REDIRECT_URL = reverse_lazy('profile')

当我try 登录时,我被重定向到"/",即使定义了LOGIN_REDIRECT_URL.但如果我改变一件事在我看来:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView


class HomeRequestHandler(LoginRequiredMixin, TemplateView):
    template_name = "home.html"
    redirect_field_name = "redirect_to"

它将我的urlhttp://localhost:8000/accounts/login/?next=/更改为http://localhost:8000/accounts/login/?redirect_to=/,现在常量正常工作,为什么?

推荐答案

在Django中,默认情况下,LoginRequiredMixin在登录后使用?next=参数进行重定向.当Django将未经身份验证的用户重定向到登录页面时,此参数会自动附加到URL.Ref.

您在settings.py文件中设置了LOGIN_REDIRECT_URL = reverse_lazy('profile'),它应该在登录后将用户重定向到配置文件页面,但此设置仅在URL中不存在?next=参数时使用,或者当用户直接从登录页面登录而不从另一个受保护的页面重定向时使用.

当您将HomeRequestHandler类修改为包含redirect_field_name = "redirect_to"时,实质上更改了LoginRequiredMixin查找的查询参数.它现在不是使用next,而是使用redirect_to.因此,当Django没有找到redirect_to参数时(因为这不是默认行为),它会退回到使用LOGIN_REDIRECT_URL设置.

Django相关问答推荐

Django REST framework:object has no attributed after annotation;Got attributeError when try to get a value for field field on serializer<>

社工/社工简戈

如何在 Django 中设置与 Session 相关的字段

如何删除Docker上的django应用程序?

使用 Pytest 在 Django 中编写测试用例时如何加载特定目录中的所有固定装置

Pytest-django - 测试创建和传递所需的用户对象

Django 和 HTML 无法从指定时间开始视频

为什么在 Docker 映像中运行我的 Django 应用程序后下载属性不再起作用?

基于每个条目的 Django Queryset 过滤

Django Rest Framework 中的 to_representation() 可以访问普通字段吗

如何使用自定义 AdminSite 类?

可以在基于 Django 类的视图中设置实例变量吗?

Django:使用 ModelForm 编辑现有数据库条目

get_or_create() 线程安全吗

django Datefield 到 Unix 时间戳

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

运行单元测试时禁用 Django South?

Django将整数模型字段的范围设置为约束

如何检测 Heroku 的环境?

APIView 类和视图集类之间的区别?