Python Django自定义LoginView未登录用户

Python Django自定义LoginView未登录用户,python,django,django-class-based-views,Python,Django,Django Class Based Views,我是Django的新手,但我正试图通过对通用Django身份验证组件进行子类化来构建一个定制的身份验证系统。主要的问题是,我的自定义LoginView除了刷新页面之外似乎什么都不做 forms.py 来自django导入表单的 从django.contrib.auth.forms导入UserCreationForm、UserChangeForm、ReadOnlyPasswordHashField、AuthenticationForm、UserName字段 从django.utils.transl

我是Django的新手,但我正试图通过对通用Django身份验证组件进行子类化来构建一个定制的身份验证系统。主要的问题是,我的自定义LoginView除了刷新页面之外似乎什么都不做

forms.py

来自django导入表单的

从django.contrib.auth.forms导入UserCreationForm、UserChangeForm、ReadOnlyPasswordHashField、AuthenticationForm、UserName字段
从django.utils.translation导入gettext,gettext\u作为_
from.models导入CustomUser
局选项=[(“人力资源”、“人力资源”),
(“CRT”、“创意”),
(“会计科目”、“会计”),]
类CustomAuthForm(AuthenticationForm):
bureau=forms.ChoiceField(widget=forms.Select,choices=bureau\u choices)
email=forms.CharField(widget=forms.TextInput(attrs={'autofocus':True,'placeholder':'email'}))
密码=forms.CharField(
label=uux(“密码”),
strip=False,
widget=forms.PasswordInput(attrs={'autocomplete':'current password','placeholder':'password'}),
)
类元:
模型=自定义用户
字段=('email','password',)
视图.py

从django.exe导入渲染
从django.url导入反向链接
从django.contrib.auth.views导入登录视图
从django.contrib.auth导入身份验证,登录
从django.contrib.auth.forms导入AuthenticationForm
从.forms导入CustomAuthForm
类CustomLoginView(LoginView):
form_class=CustomAuthForm
身份验证\u form=CustomAuthForm
模板名称='users/login.html'
url.py

从django.url导入路径
从…起导入视图
app_name='users'
URL模式=[
路径('login/',views.CustomLoginView.as_view(),name='login'),
]
所以我已经阅读了答案,这些答案似乎都涉及到超类
LoginView
中的重写方法。当我重写我的
CustomLoginView
来重写一个方法时,它们不会被调用。例如:

视图.py

类CustomLoginView(LoginView):
form_class=CustomAuthForm
身份验证\u form=CustomAuthForm
模板名称='users/login.html'
def表格_有效(自我,请求):
打印(自我请求)
返回super().form_有效(form)

这没用。我似乎找不到我需要覆盖哪些方法以及在哪些方法中放置登录逻辑的任何参考。

只是为了确保:您正在调用
return super()。在
CustomLoginView
form\u valid
方法的末尾调用form\u valid(form)
?是的。我在
表单中添加了更多有效的
print
调用只是一个占位符。@Bjorn您能解释为什么调用
return super().form\u valid(form)
是必需的吗?您必须调用它,因为
LoginView
(您正在扩展的)已经定义了
form\u valid
方法。如果不调用
super()
,则将永远不会执行
LoginView.form\u valid
中定义的逻辑。请参阅:@Bjorn即使使用
super()
调用,也不会在子类或父类中执行
form\u valid
方法中的任何内容。想知道为什么吗?请确定:您正在调用
return super()。在
CustomLoginView
form\u valid
方法的末尾调用form\u valid(form)
?是的。我在
表单中添加了更多有效的
print
调用只是一个占位符。@Bjorn您能解释为什么调用
return super().form\u valid(form)
是必需的吗?您必须调用它,因为
LoginView
(您正在扩展的)已经定义了
form\u valid
方法。如果不调用
super()
,则将永远不会执行
LoginView.form\u valid
中定义的逻辑。请参阅:@Bjorn即使使用
super()
调用,也不会在子类或父类中执行
form\u valid
方法中的任何内容。你知道为什么吗?