欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django实现用户的登录与注销(session)

程序员文章站 2022-03-25 09:52:49
...

首先要先创建User数据模型

class User(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    email = models.CharField(max_length=40)

实现用户的注册

在view中

def register(request):
    message= "right"
    if request.method == "POST":
        Username = request.POST.get('username')
        Password = request.POST.get('password')
        Email = request.POST.get('email')
        user = User()

        try:
            if User.objects.get(username=Username):
                message = "用户名已存在"
                return render(request, 'register.html', {'m':message})
        except:
            user.username = Username

        user.password = Password

        try:
            if User.objects.get(email=Email):
                message = "邮箱已存在"
                return render(request, 'register.html', {'m':message})
        except:
            user.email = Email
        user.save()
        send_register_email(Email)
        return render(request, 'success.html', {'user': user})

    return render(request, 'register.html', {'m':message})

在前端只需要将注册信息的表单传入即可

实现用户的登录

在view中

def login(request):
    if request.method=='GET':
        return render(request,'login.html')
    else:
        name=request.POST.get('name')
        pwd=request.POST.get('pwd')
        user = User.objects.filter(username=name, password=pwd).first()
        if user:
            request.session['name']=user.username 
            return redirect('/account/index')
        else:
            return render(request,'login.html',{'msg':"用户名/密码错误"})

其中的 request.session['name']=user.username 执行了一下几步:

1.生成随机的sessionID字符串

2.将sessionID和用户的信息在数据库中保存为一个键值对

3.通过cookie将sessionID保存在客户端上

这时候通过用户再次向服务器发送请求时服务器就可以通过请求中的sessionID判断用户的信息了,从而达到保存登录状态的要求。

实现用户的注销

在view中

def logout(request):
    del request.session['name']
    return redirect('/account/index')
用户注销其实就是删除客户端的sessionID在服务器中保存的状态,所以一句简单的del request.session['name']就可以达到我们的要求






相关标签: django