准备相应模板文件
我要实现用户的登录、注册、和注销、自然需要三个页面文件,
让我们创建好相对于的html文件,
首页界面:index.html:用作用户登录成功后显示出的界面信息
注册界面:register.html:用作用户注册界面
登录界面:login.html :用作用户输入用户名密码登录界面
三个界面代码如下
index.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
<!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
<!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字段作为判断用户是否注册的依据
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 .\manage.py makemigrations
Python .\manage.py migrate
视图函数是需要完成的功能,我们首先功能进行完善
加密函数
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,则对其进行操作,
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信息
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中的信息,以此来判断用户是否登录,没有登录则将页面定位到登录页,让其登录
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删除掉即可
def logout(request):
# 反向解析至登录页
repsone = redirect(reverse('login'))
# 删除响应的usid值
repsone.delete_cookie('usid')
return repsone
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 .\manage.py runserver
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。