ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django 三天免登陆

2020-12-10 15:35:15  阅读:250  来源: 互联网

标签:request Django 三天 密码 登陆 student loginUser login django


Django 三天免登陆流程

需求

访问 http://127.0.0.1:8000/student/login/
点击记住密码,设置缓存保存三天,三天免登陆
不点击记住密码,再次登录时需要手动输入密码

#新创建项目 test31
#新创建 app student
python manage.py startapp student
#配置 settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'student'
]
# 配置urls test31/urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^student/',include('student.urls'))
]
#配置子路由
#coding=utf-8

from django.conf.urls import url
import views
urlpatterns = [
    url(r'^login/$',views.login_view)
]
#配置视图 views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.http import HttpResponse
from django.shortcuts import render, redirect


# Create your views here.
def login_view(request):
    if request.method == 'GET':
        #判断登录时是否有cookies
        if request.COOKIES.has_key('loginUser'):
            #获取用户名和密码
            loginUser = request.COOKIES.get('loginUser','').split(',')
            uname = loginUser[0]
            pwd = loginUser[1]
            #传递给前端页面渲染
            return render(request,'login.html',{'uname':uname,'pwd':pwd})
        else:
            return render(request,'login.html')
    else:
        #获取请求参数
        uname = request.POST.get('uname','')
        pwd = request.POST.get('pwd','')

        response = HttpResponse()
        if uname == 'zhangsan' and pwd == '123':
            #赋值响应内容
            response.content = 'login success!'

            # 是否记住密码;判断前端页面传过来的 flag 是否为1 ,为1 那么再次登录界面的时候成为 get 请求,将cookie 信息填入空白处
            if request.POST.get('flag') == '1':
                response.set_cookie('loginUser',uname+','+pwd,max_age=3*24*60*60,path='/student/')
                return response
            else:
                #清空cookie 信息中的 loginUser
                response.delete_cookie('loginUser',path='/student/')
                return response
        else:
            # 重定向至重新登录页面
            return redirect('/student/login')

#配置 templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="/student/login/" method="post">
        {% csrf_token %}
        <p>
            <label for="sn">姓名:</label><input type="text" name="uname" id="sn" value="{{ uname }}"/>
        </p>
        <p>
            <label for="pd">密码:</label><input type="password" name="pwd" id="pd" value="{{ pwd }}"/>
        </p>
        <p>
            <input type="checkbox" name="flag" value="1" checked/>记住密码
        </p>
        <p>
            <input type="submit" value="login"/>
        </p>

    </form>

</body>
</html>


效果: 未点击记住密码时没有 cookie:

再次访问http://127.0.0.1:8000/student/login/ 时候不会自动填充账号和密码,也没有cookie

效果: 点击登录时记住密码


再次访问http://127.0.0.1:8000/student/login/ 时候会自动填充账号和密码,并有cookie

标签:request,Django,三天,密码,登陆,student,loginUser,login,django
来源: https://www.cnblogs.com/lixinliang/p/14115286.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有