1 案例1:实现鉴权
1.1 问题
编写登陆页面模板
编写三个视图,分别用于登陆页、验证登陆以及受保护页面
如果用户密码正确给出登陆成功,否则重定向到登陆页
编写URLCONF,实现入口
1.2 方案
1.浏览器访问任意入口,检测session变量,如果没有设置就跳转/home入口,展示登陆页面
2.用户在登陆页面填写账号、密码信息,提交给/login入口,使用数据库鉴定是否是合法用户。如果合法,设置session变量为任意值,然后跳转到原始路径。
3.如果在任意入口检测logined变量存在,则正常显示页面。
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:编写登陆页面模板
创建模板文件polls/templates/polls/home.html,将如下代码写入:
<form action="/polls/login/" method="post"> #表单提交后会转到login(验证用户是否登录成功)页面
{% csrf_token %}
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="pwd">
<input type="submit" value="提交">
</form>
步骤二:编写三个视图,分别用于登陆页、验证登陆以及受保护页面
将三个视图写入前面案例创建项目中,在
Session 就是保存在后台数据或者缓存中的一个键值对,同样的存储着用户信息,为了更好的保护用户隐私,其实是对前端cookie的一个升级的保护措施.
当登录成功后,会向后台数据库与前端Cookie同时发放一段随机字符串,分别保存在后台的session中,前端写到用户浏览器中,用户下次登录时候 拿着浏览器存着的sessionID当做KEY去后台数据库中匹配进行验证登录即可拿到用户相关信息,可以防止敏感信息直接暴露在浏览器上。
#登录页面
def home(request):
return render(request, 'polls/home.html')
#验证用户是否登录成功
def login(request):
if request.method == 'POST':
#这里可以根据登录的用户显示不同的数据
username = request.POST.get('username')
pwd = request.POST.get('pwd')
if username == 'zhangsan' and pwd == '123456':
# 设置session
request.session['IS_LOGIN'] = True
return redirect('index')
return redirect('home')
#受保护页面:已登录用户可以访问,如果没有登录重定向到登录页面
def protected(request):
#从请求里获取username session
#首先判断存不存在session,如果不存在跳转到home页面
is_login = request.session.get('IS_LOGIN', False)
if is_login:
return HttpResponse('OK')
return redirect('home')
步骤三:编写URLCONF,实现入口
修改polls/urls.py文件并更改URL,配对新视图
url(r'^home/$', views.home, name='home'),
url(r'^login/$', views.login, name='login'),
url(r'^protected/$', views.protected, name = 'protected'),
步骤四:如果用户密码正确给出登陆成功,否则重定向到登陆页
当访问http://127.0.0.1:8000/polls/protected时,页面会跳转到如图-1所示:
图-1
此时,登录账号密码输入错误时,页面自动重定向到登陆页,如图-2、图-3所示:
图-2
图-3
如果用户名密码输入正确,给出登录成功,输出结果如图-4、图-5所示:
图-4