<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页</title>
<style>
#pwd input{
margin-left:23px
}
</style>
</head>
<body>
<form action="/user/login/" method="post">
<!--传统的html登录表单-->
<p>
用户名: <input type="text" name="username" value="{{ username }}">
<span> {{ error }}</span>
</p>
<p id=pwd>
密码: <input type="text" name="password" value="{{ password }}">
</p>
<p>
记住用户名: <input type="checkbox" name="isSaved">
</p>
<p>
<input type="submit" value="登录">
</p>
</form>
</body>
</html>
上述代码理解起来非常的通俗易懂,但是不难发现我们在其中新增了一个记住用户名的小功能,大家想想这个功能又是如何实现的呢?没错它就是通过 Cookies 实现的。在前面的章节《Django中Cookie和Session介绍(一)》中,我们给大家详细的讲述了 Cookies与 Session,在本节我们将用到它们,如果忘记的小伙伴请抓紧时复习哦。
#用户的登录逻辑处理
def login_view(request):
#处理GET请求
if request.method == 'GET':
#1, 首先检查session,判断用户是否第一次登录,如果不是,则直接重定向到首页
if 'username' in request.session: #request.session 类字典对象
return HttpResponseRedirect('/index/allbook')
#2, 然后检查cookie,是否保存了用户登录信息
if 'username' in request.COOKIES:
#若存在则赋值回session,并重定向到首页
request.session['username'] = request.COOKIES['username']
return HttpResponseRedirect('/index/allbook')
#不存在则重定向登录页,让用户登录
return render(request, 'user/login.html')
# 处理POST请求
elif request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
m = hashlib.md5()
m.update(password.encode())
password_m = m.hexdigest()
#判断输入是否其中一项为空或者格式不正确
if not username or not password:
error = '你输入的用户名或者密码错误 !'
return render(request, 'user/login.html', locals())
#若输入没有问题则进入数据比对阶段,看看已经注册的用户中是否存在该用户
users = User.objects.filter(username=username, password=password_m)
# 由于使用了filter, 所以返回值user是一个数组,但是也要考虑其为空的状态,即没有查到该用户
if not users:
error = '用户不存在或用户密码输入错误!!'
return render(request, 'user/login.html', locals())
# 返回值是个数组,并且用户名具备唯一索引,当前用户是该数组中第一个元素
users = users[0]
request.session['username'] = username
response = HttpResponseRedirect('/index/allbook')
#检查post 提交的所有键中是否存在 isSaved 键
if 'isSaved' in request.POST.keys():
#若存在则说明用户选择了记住用户名功能,执行以下语句设置cookie的过期时间
response.set_cookie('username', username, 60*60*24*7)
return response
完成视图层代码后,记得要配置路由映射关系,如下所示:
from django.urls import path
from user import views
urlpatterns=[
path('reg/',views.reg_view),
path('login/',views.login_view)
]
def logout_view(request):
#实现退出功能
#删除session
if 'username' in request.session:
del request.session['username']
resp = HttpResponseRedirect('/user/index')
#删除cookie
if 'username' in request.COOKIES:
resp.delete_cookie('username')
return resp
#编写视图函数映射关系
urlpatterns = [
#http://127.0.0.1:8000/user/logout
path('logout/', views.logout_view)
]
大家可以自行编写一个简单的网站首页,我们知道退出功能的 button 都会显示在首页边角位置,所以只需要将退出功能的 url 关联到 <a> 标签的 href 属性即可实现点击退出的功能了。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有