登录注册是一个网站再平常不过的功能,因此Django内置了许多类和方法来帮助我们使开发更便捷,相比较于使用函数的方式来处理登录注册的后端代码,使用类的方式更为便捷方便,如下:
urls.py:
path('login/', views.LoginUser.as_view(), name='login'),
path('register/', views.RegisterUser.as_view(), name='register'),
path('logout/', views.LogoutUser.as_view(), name='logout'),
model继承自Django内置的User模型。
forms.py:
from django import forms
from .models import Profile
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
class RegisterForm(forms.ModelForm):
password = forms.CharField()
password2 = forms.CharField()
class Meta:
model = Profile
fields = ['username', 'email']
接下来是后端代码:
#1 登录
登录使用Django内置的LoginView,你可以直接使用它,也可以重写它,使用非常简单:
from django.contrib.auth.views import LoginView, LogoutView
class LoginUser(LoginView):
template_name = 'accounts/login.html'
这里需要在配置文件中添加:
LOGIN_REDIRECT_URL = '/' #登录后重定向的url
#2 登出
登录使用Django内置的LogoutView,与LoginView在使用上别无二致。
from django.utils.decorators import method_decorator
from django.contrib.auth.views import LoginView, LogoutView
@method_decorator(login_required, name='dispatch')
class LogoutUser(LogoutView):
#添加更多的自定义细节
这里需要在配置文件中添加:
LOGOUT_REDIRECT_URL = '/' #登出后重定向的url
#3 注册
注册用户使用了CreateView,代码如下:
from django.views.generic import CreateView
class RegisterUser(CreateView):
template_name = 'accounts/register.html'
form_class = RegisterForm
success_url = '/'
def form_invalid(self, form):
return HttpResponse("注册表单输入有误。请重新输入~")
def form_valid(self, form):
#valid = super(RegisterUser, self).form_valid(form)
new_user = form.save(commit=False)
new_user.set_password(form.cleaned_data.get('password'))
new_user.save()
login(self.request, new_user)
return redirect(self.success_url)
#def post(self, request, *args, **kwargs):
#register_form = RegisterForm(request.POST)
#if register_form.is_valid():
#new_user = register_form.save(commit=False)
#new_user.set_password(register_form.cleaned_data.get('password'))
#new_user.save()
#login(request, new_user)
#return redirect(self.success_url)
直接使用form_valid()方法或者使用post()方法都可以,看你需求。