《云计算全栈》-pythonweb开发篇:MTV响应流程、入口映射—实现鉴权、实现用户密码登录正确给出登录成功、否则重定向到登录页面

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

发布了275 篇原创文章 · 获赞 46 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xie_qi_chao/article/details/104726512