正在进入ing...

Django使用原生User进行登陆

发布时间:2020-09-08 浏览量: 2115 文章分类: python

首先毫无疑问,我的博客站点就是使用原生的,因为第一我不想开放注册(好像也没啥必要),其次就是对我来说博客主要也是记录一下自己学习的一些知识和心得。当然是越简单,越省事越好。话不多说了。直接开整。

我的大概逻辑是 - 制作一个login的函数,GET请求方式展示登陆页面,通过form渲染表单 - POST请求方式就用来验证账号密码信息,确认是否正确,给予登陆

form.py
#如果是涉及多人的,记得加验证码和增加表单验证功能
class LoginForm(forms.Form):
    username = forms.CharField(label='用户名',max_length=64)
    password = forms.CharField(label='密码',max_length=32,widget=forms.PasswordInput)
views.py
from django.shortcuts import redirect,render
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout,login,authenticate
from web.forms import forms

def login_view(request):
    if request.method == 'GET':
        #页面请求,返回页面内容
        form = forms.LoginForm()
        return render(request, 'login.html', {'form': form})
    if request.method =='POST':
        form = forms.LoginForm(data=request.POST)

        if not form.is_valid():
            #表单验证失败
            return redirect('index')

        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username,password=password)
        if not user:
            #身份信息验证失败
            return redirect('index')

        login(request,user)
        return render(request,'login.html')

@login_required
def logout_view(request):
    logout(request)
    return redirect("index")

这里全部用到的都是原生的authenticateloginlogoutlogin_required这4个方法实现的。

authenticate方法

用来验证登陆的用户名、密码是否正确,成功登陆会返回用户的username,返回的类型也是django.contrib.auth.models.User这代表我们也可以直接去调用用户的一些信息等等

login 方法

这个比较简单,就是用户在我们验证成功之后,根据用户信息,生成sessionid,我们可以传入用户请求,登陆用户,让用户的登陆中包含用户的信息,方便我们做识别。

logout 方法

同上,就是删除请求中用户的身份信息,变回为未登陆状态

login_required 方法

这个是一个装饰器,被装饰的函数代表必须登录后才可以访问,然后在返回重定向的网址。