覆盖Django LoginView
我正在编写一个新的身份验证模板,用于Django应用程序。我是基于一个教程,我遵循这一点 本教程使用内置的身份验证视图进行密码重置,我希望保留该视图,但我想稍微对其进行自定义。我在用户帐户上有一个名为“disabled”的属性,允许用户登录。在登录视图中,我想让它在允许登录之前检查帐户是否被禁用,“锁定”。对于重置密码视图,如果成功,我想让它解锁帐户 路径的示例如下所示:覆盖Django LoginView,django,django-models,django-views,Django,Django Models,Django Views,我正在编写一个新的身份验证模板,用于Django应用程序。我是基于一个教程,我遵循这一点 本教程使用内置的身份验证视图进行密码重置,我希望保留该视图,但我想稍微对其进行自定义。我在用户帐户上有一个名为“disabled”的属性,允许用户登录。在登录视图中,我想让它在允许登录之前检查帐户是否被禁用,“锁定”。对于重置密码视图,如果成功,我想让它解锁帐户 路径的示例如下所示: from django.contrib.auth import views as auth_views urlpattern
from django.contrib.auth import views as auth_views
urlpatterns = [
path('accounts/login/', auth_views.LoginView.as_view(), name='login')
]
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]
帐户模型如下所示:
from django.contrib.auth import views as auth_views
urlpatterns = [
path('accounts/login/', auth_views.LoginView.as_view(), name='login')
]
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]
我是否将其导入视图并在其中覆盖它?有人可以发布一个快速示例吗?您可以编写用于登录的自定义视图函数来实现这一点: 在
views.py中
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})
from . import views
urlpatterns = [
path('accounts/login/', views.login, name='login')
]
url.py
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})
from . import views
urlpatterns = [
path('accounts/login/', views.login, name='login')
]
您可以编写用于登录的自定义视图函数,以实现以下目的:
在views.py中
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})
from . import views
urlpatterns = [
path('accounts/login/', views.login, name='login')
]
url.py
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})
from . import views
urlpatterns = [
path('accounts/login/', views.login, name='login')
]
根据deafult,Django使用is_active
执行相同的操作。Django使用is_active
执行相同的操作。hi,你知道如何覆盖登录表单吗?