Django:自定义LoginView未对用户进行身份验证

2024-06-16 13:05:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个自定义LoginView,只是为了传递一些上下文变量

但现在,当我登录时,用户不会登录,只会重定向到urls.py文件中指示的页面:

from core import views

app_name = "core"

    urlpatterns = [
        path('', views.ScolarteHome.as_view(), name='home'),
        path("ingresar/", views.LoginView.as_view(template_name='scolarte/registration/login.html', success_url=reverse_lazy('core:home')), name="login"),
    ]

我的自定义登录视图:

class LoginView(SuccessURLAllowedHostsMixin, FormView):
    """
    Display the login form and handle the login action.
    """
    form_class = AuthenticationForm
    authentication_form = LoginForm
    template_name = 'registration/login.html'
    redirect_authenticated_user = True


    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        msg = {'cliente': 'Ingresar como cliente', 'vendedor': 'Ingresar como vendedor'}
        context['msg'] = msg.get(self.request.GET.get('cliente-o-vendedor'), '')
        return context

forms.py

from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.forms.widgets import PasswordInput, TextInput

class LoginForm(AuthenticationForm):
    username = forms.CharField(widget=TextInput(attrs={'class': 'span2','placeholder': 'Nombre de usuario'}))
    password = forms.CharField(widget=PasswordInput(attrs={'class': 'span2','placeholder':'Contraseña'}))

Tags: namefromcoreimportformgetcontextlogin
1条回答
网友
1楼 · 发布于 2024-06-16 13:05:13

您可以直接使用LoginView作为父类,而不是不提供身份验证逻辑的FormView

from django.contrib.auth.views import LoginView

class MyLoginView(LoginView):
    """
    Display the login form and handle the login action.
    """
    authentication_form = LoginForm
    template_name = 'registration/login.html'
    redirect_authenticated_user = True

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        msg = {'cliente': 'Ingresar como cliente', 'vendedor': 'Ingresar como vendedor'}
        context['msg'] = msg.get(self.request.GET.get('cliente-o-vendedor'), '')
        return context

相关问题 更多 >