前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文看懂Python Django下的用户登录注册注销

一文看懂Python Django下的用户登录注册注销

原创
作者头像
如此这般那便是极好
发布2024-04-11 14:45:58
14500
代码可运行
发布2024-04-11 14:45:58
举报
文章被收录于专栏:未来码迹未来码迹
运行总次数:0
代码可运行

一文看懂Python Django下的用户登录注册注销

一、准备工作

准备相应模板文件

我要实现用户的登录、注册、和注销、自然需要三个页面文件,

让我们创建好相对于的html文件,

首页界面:index.html:用作用户登录成功后显示出的界面信息

注册界面:register.html:用作用户注册界面

登录界面:login.html :用作用户输入用户名密码登录界面

三个界面代码如下

index.html

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<p>首页</p>
<hr>
{% if user %}
	欢迎你:{{ user.uname }}
    <a href="{% url 'logout' %}">注销</a>
{% endif %}

</body>
</html>

register.html

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<p>注册</p>
<hr>
<form action="" method="post">
    {% csrf_token %}
    <p>邮箱:<input type="text" name="email"></p>
    <p>用户名:<input type="text" name="uname"></p>
    <p>密码: <input type="text" name="passwd"></p>
    <button>确认注册</button>
</form>
<a href="{% url 'login' %}">返回登录页</a>
</body>
</html>

login.html

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<p>登录</p>
<hr>
<form action="" method="post">
    {% csrf_token %}
    <p>登录邮箱:<input type="text" name="email"></p>
    <p>密码: <input type="password" name="passwd"></p>
    <button>登录</button>
</form>
<a href="{% url 'register' %}">注册</a>
</body>
</html>

二、创建用户模型

我们需要登录,自然是需要用户输入密码等信息,我们建立以下字段信息,并对数据进行迁移

我们使用email字段作为判断用户是否注册的依据

代码语言:python
代码运行次数:0
复制
from django.db import models
class UserMondel(models.Model):
    uname = models.CharField(max_length=10)
    email = models.EmailField(max_length=254, unique=True)
    password = models.CharField(max_length=254)

创建好以上模型之后,我们进行迁移

代码语言:python
代码运行次数:0
复制
Python .\manage.py makemigrations
Python .\manage.py migrate 

三、视图函数

视图函数是需要完成的功能,我们首先功能进行完善

加密函数

代码语言:python
代码运行次数:0
复制
def sha256_encrypt(input_string):
    # 创建一个sha256对象
    sha256_hash = hashlib.sha256()

    # 更新sha256对象的内容
    sha256_hash.update(input_string.encode('utf-8'))

    # 获取16进制的哈希值
    hex_dig = sha256_hash.hexdigest()

    return hex_dig

注册功能

大致思路,首先判断请求的方式是否是post,如果是post,则对其进行操作,

代码语言:python
代码运行次数:0
复制
def register(request):
    # 判断提交过来的数据是否使用了post方法
    if request.method == 'POST':
        # 如果使用了post方法,我们获取邮件、用户名和密码
        email = request.POST.get('email')
        uname = request.POST.get('uname')
        passwd = request.POST.get('passwd')
        # 使用邮箱查询用户是否存在,
        user = UserMondel.objects.filter(email=email)
        # 存在则提示"用户已存在"
        if user.exists():
            return HttpResponse('用户已存在')
        else:
            # 不存在则要进行创建,并对密码进行加密存储
            password = sha256_encrypt(passwd)
            UserMondel.objects.create(email=email,uname=uname,password=password)
    else:
        # 不是post请求,则重新渲染注册界面
        return render(request, 'register.html')
    #返回定向到登录界面
    return  redirect(reverse('login'))

登录功能

主要逻辑,判断请求是否是post,之后获取用户名密码信息进行对比,对比正确后设置cookie信息

代码语言:python
代码运行次数:0
复制
def login(request):
    # 判断请求是否是post
    if request.method == 'POST':
        # 获取邮箱和密码信息
        email = request.POST.get('email')
        passwd = request.POST.get('passwd')
        # 查询用户是否存在于数据库中
        user = UserMondel.objects.filter(email=email)
        if user.exists():
            # 存在则对比密码,注意,密码要进行加密后进行对比
            inputpasswd = sha256_encrypt(passwd)
            print(inputpasswd)
            # 对比密码,
            if user.first().password == inputpasswd:
                # 密码校验正确,则设置cookie信息,时间为1小时失效
                response = redirect(reverse('index'))
                response.set_cookie('usid',user.first().id,max_age=3600)
                return response

        else:
            return HttpResponse('用户名不存在,请先注册')

    return render(request, 'login.html')

首页

我们需要获取cookie中的信息,以此来判断用户是否登录,没有登录则将页面定位到登录页,让其登录

代码语言:python
代码运行次数:0
复制
def index(request):
    # 获取cookie中的usid值,不存在则默认0
    usid = request.COOKIES.get('usid',0)
    # 查询数据库中是否存在用户
    user = UserMondel.objects.filter(id=usid).first()
    # 如果usid等于0,则代表用户不存在,则需定位到登录页
    if usid == 0:
        return redirect(reverse('login'))
    # 存在则将用户进行传到index页面
    return render(request,'index.html',{'user':user})

注销

注销就是讲cookie中的usid删除掉即可

代码语言:python
代码运行次数:0
复制
def logout(request):
    # 反向解析至登录页
    repsone = redirect(reverse('login'))
    # 删除响应的usid值
    repsone.delete_cookie('usid')
    return repsone

四、路径

代码语言:python
代码运行次数:0
复制
urlpatterns = [
    path('index/', index,name='index'),
    path('register/', register,name='register'),
    path('login/', login,name='login'),
    path('logout/', logout,name='logout'),
    path('admin/', admin.site.urls),
]

五、运行

代码语言:python
代码运行次数:0
复制
 python .\manage.py runserver

六、效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一文看懂Python Django下的用户登录注册注销
    • 一、准备工作
      • 二、创建用户模型
        • 三、视图函数
          • 四、路径
            • 五、运行
              • 六、效果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档