怎样使用django的类视图处理登录注册功能(LoginView,LogoutView,CreateView)


登录注册是一个网站再平常不过的功能,因此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

有关LoginView的详细说明


#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

有关LogoutView的详细说明


#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()方法都可以,看你需求。

有关CreateView的详细说明

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值