前言
缺少全栈的练手项目,找了一本书《自动化平台测试开发:python测试开发实战》用来边做边练习,希望能坚持下来。
第二章从抄代码当中结合一些官方文档,加入自己的理解,目前还在编抄遍看的过程。本章主要是关于登录后的重定向到home页面,需要带入$用户名 信息,同时还要支持退出。
目录
前言
一、准备工作
二、相关资料
2.1、登录的相关文档
三、代码实现和注释
3.1 login方法
3.2 退出登录
四、小结
一、准备工作
上一章中作者写了个demo,在urls.py文件中做了path 和views的的方法匹配,而views的 login方法的处理是任意请求后返回到login.html页面。
下面根据页面来分析下要实现的需求和方法拆解:
二、相关资料
2.1、登录的相关文档
django.contrib.auth | Django 文档 | Djangohttps://docs.djangoproject.com/zh-hans/4.0/ref/contrib/auth/#django.contrib.auth.models.User使用 Django 的验证系统 | Django 文档 | Djangohttps://docs.djangoproject.com/zh-hans/4.0/topics/auth/default/Django中的用户认证 | Django 文档 | Djangohttps://docs.djangoproject.com/zh-hans/4.0/topics/auth/如何使用会话 | Django 文档 | Djangohttps://docs.djangoproject.com/zh-hans/4.0/topics/http/sessions/
用户登录鉴权方法:
?
三、代码实现和注释
3.1 login方法
在apitest目录下 views.py 页面处理登录逻辑
def login(request):
if request.POST:
username = password = ''
#初始化变量
username = request.POST.get('username')
password = request.POST.get('password')
#从login.html页面获取name为'username'和'password'的值赋值给变量
user = auth.authenticate(username=username,password=password)
#使用auth.authenticate获取到user对象,如果user为none则登录失败。
if user is not None and user.is_active:
auth.login(request,user)
#登录操作,login方法的参数里面user为登录成功的对象
request.session['user'] = username
#讲登录成功的username变量放入到session字典里面user存起来,方便template页面调用
response = HttpResponseRedirect('/home')
#重定向到home页面
return response
else:
return render(request,'login.html',{'error':'username or password error'})
#登录失败会吧error传递到login.html 的error变量当中
return render(request,'login.html')
#当前页面为login页面
def home(request):
return render(request,'home.html')
?将login重定向的home的path;需要在urls里面将/home指向到 /templates/home.html
urlpatterns = [
path('admin/', admin.site.urls),
path('test/',views.test) ,#关联路径到函数
path('login/',views.login),
path('home/',views.home),
path('logout/',views.logout)
]
home页面源码如下,位置在templates/home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自动化测试平台</title>
</head>
<body>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>欢迎您,<a href="#">{{user}}</a></li>
<li><a href="/logout/">退出</a></li>
</ul>
</body>
</html>
3.2 退出登录
仍然在views.py 里面处理logout逻辑,通过使用auth.logout自带方法,参数重不需要携带验证成功的user对象
def logout(request):
auth.logout(request)
return render(request,'login.html')
同样的,处理urls
urlpatterns = [
path('admin/', admin.site.urls),
path('test/',views.test) ,#关联路径到函数
path('login/',views.login),
path('home/',views.home),
path('logout/',views.logout)
]
四、小结
当我们访问path路径,例如http://127.0.0.1:8000/login 时候,是先去访问工程目录下的urls,找到/login对应的views.py 的方法,再根据views.py的方法决定页面跳转逻辑。
views.py 定义的方法可以跟html直接调用,例如html页面中通过{{erro}}来传导。而html页面form表单中的username和password,通过name属性直接获取到。
下面以login实现为例,总结下页面关系:
位置 | 作用 | /工程目录/应用目录/template/login.html | 触发方法的接口 | /工程目录/工程同名目录/urls.py | path路径和login方法的映射 | /工程目录/应用目录/views.py | login方法的定义 | /工程目录/应用目录/template/home.html | 重定向预跳转的页面 | | |
|