首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖Django LoginView

覆盖Django LoginView
EN

Stack Overflow用户
提问于 2020-06-24 13:27:26
回答 1查看 2.3K关注 0票数 2

我正在编写一个新的身份验证模板,以便与我的Django应用程序一起使用。我是基于我遵循的一个教程来实现的。

本教程使用内置的身份验证视图进行密码重置,我希望保留这些视图,但我想稍微对其进行自定义。我在用户帐户上有一个名为"disabled“的属性,它允许用户登录。在登录视图上,我想让它检查,看看帐户是否被禁用,“锁定”,然后才允许登录。对于重置密码视图,如果成功,我想让它解锁帐户。

路径的示例如下所示:

代码语言:javascript
复制
from django.contrib.auth import views as auth_views
urlpatterns = [
    path('accounts/login/', auth_views.LoginView.as_view(), name='login')
]

帐户模型如下所示:

代码语言:javascript
复制
class Account(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=150)
    phone = models.CharField(max_length=50, blank=True,null=True)
    date_of_birth = models.DateField(blank=True, null=True)
    picture = models.ImageField(blank=True, null=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)
    last_login = models.DateTimeField(null=True)
    disabled = models.BooleanField(default=True)
    hash = models.CharField(max_length=128,default=hex(random.getrandbits(128)))

    objects = AccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    def get_full_name(self):
        return self.name

    def get_short_name(self):
        return self.name.split()[0]

我是不是要把它导入到视图中并在视图中覆盖它?有没有人可以发布一个简单的例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-24 13:38:44

您可以编写用于登录的自定义视图函数来实现这一点:

views.py

代码语言:javascript
复制
from django.shortcuts import render,redirect
from django.urls import reverse
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import messages

def login(request):
    if request.method == 'POST':
        form = AuthenticationForm(request.POST)
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username,password=password)
        if user:
            if user.is_active:
                login(request,user)
                return redirect(reverse('your_success_url'))
        else:
            messages.error(request,'username or password not correct')
            return redirect(reverse('your_login_url'))
        
                
    else:
        form = AuthenticationForm()
    return render(request,'your_template_name.html',{'form':form})

urls.py

代码语言:javascript
复制
from . import views

urlpatterns = [
    path('accounts/login/', views.login, name='login')
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62548264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档