Django中cookies 和 session,以及网站登录操作流程

Django中cookies 和 session

1、cookies
  • 1、什么是cookies

    • cookies是一种存储技术,将一段文本保存在客户端(浏览器)的一种技术,并可以长时间的保存
  • 2、cookies的使用场合

    • 保存登录信息
    • 保存用户的搜索关键词
  • 3、Django中使用cookies

    • 设置cookies
      • ①、不使用模板
        resp = HttpResponse(‘设置cookies’)
        resp.set_cookie(key, value, expires)
        return resp
        • key:cookies 的名称
        • value:保存的cookies的值
        • expires:保存的时间,以秒为单位
      • ②、使用模板
        resp = render(request, ‘login.html’, locals())
        resp.set_cookie(key, value, expires)
        return resp
        • key:cookies 的名称
        • value:保存的cookies的值
        • expires:保存的时间,以秒为单位
      • ③、重定向
        resp = HttpResponseRedirect(’/index/login/’)
        resp.set_cookie(key, value, expires)
        return resp
        • key:cookies 的名称
        • value:保存的cookies的值
        • expires:保存的时间,以秒为单位
    # views.py
    def coo1_views(request):
    	'''不使用模板保存cookie'''
    	# 创建响应对象
        resp = HttpResponse('设置cookies')
        # 通过响应对象添加 cookie
        resp.set_cookie(key='cookie1', value='123456', expires=86400)
        return resp
    
    def coo2_views(request):
    	'''使用模板保存cookie'''
    	resp = render(request, 'login.html', locals())
        resp.set_cookie('cookie2', '222222', 86400)
        return resp
    
    def coo3_views(request):
    	'''使用重定向保存cookie'''
    	resp = HttpResponseRedirect('/index/login/')
        resp.set_cookie('cookie3', '333333', 86400)
        return resp
    
    # 登录记住密码,保存cookie
    def login_views(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            uphone = request.POST.get('uphone', '')
            upwd = request.POST.get('upwd', '')
    	        	
            if uphone and upwd:
                user = User.objects.filter(uphone=uphone)
                if user:
                    if upwd == user[0].upass:
                        resp = HttpResponse('登录成功')
                        # 判断是否记住密码
                        if 'issaved' in request.POST:
                        	# 保存cookie
                            resp.set_cookie('fruitday_user', user[0].id, 86400*365)
                            return resp
                        else:
                            return resp
                    else:
                        err = '密码错误'
                        return render(request, 'login.html', locals())
                else:
                    err = '用户名不存在'
                    return render(request, 'login.html', locals())
            else:
                err = '用户名或密码不能为空'
                return render(request, 'login.html', locals())
    
    • 获取cookies
      • request.COOKIES
    # views.py
    def get_coo1_views(request):
        cookie = request.COOKIES.get('cookie1', '')
        return HttpResponse(cookie)
    
2、session - 会话
  • 1、什么是session

    • session实际上是服务器为每个浏览器临时开辟的一个存储空间,用于保存相关的请求信息
  • 2、session的使用场合

    • 是为了存放数据而存在,通常会把服务器端要用的数据保存进session
  • 3、Django中使用session

    • 设置session
      • request.session[‘key’] = value : 设置session的键值
      • request.session.set_expiry(time) :设置过期时间,如果设置为0的话,则表示浏览器关闭则失效
    • 获取session
      • request.session.get(‘key’) : 获取session的值
    • 删除session
      • del request.session.get[‘key’] : 删除session的值
    # views.py
    def add_session_views(request):
    	'''添加session'''
        # 向 session 中存储用户的名称
        request.session['uname'] = 'Sam'
        request.seesion.set_expiry(0)  # 设置关闭浏览器后,session自动失效
        return HttpResponse('OK')
    
    def get_session_views(request):
    	'''获取session'''
        uname = request.session.get('uname', '')  
        return HttpResponse(uname)  # 'Sam'
    
    def del_session_views(request):
        '''删除session'''
        del request.session['uname']
        return HttpResponse('已退出')
    
  • 4、settings.py 文件中有段session的设置

    • SESSION_COOKIE_AGE = 60 * 30 设置session的有效期为30分钟
    • SESSION_EXPIRE_AT_BROWSER_CLOSE = True 设置浏览器关闭后过期
  • 5、登录的流程设计

    • 流程图
    成功 -
    失败 -
    记住密码 -
    不记住密码 -
    有session -
    无session -
    无cookie -
    有cookie -
    login-
    POST -
    GET -
    实现登录操作 -
    保存session -
    返回到登录页面 -
    保存cookie -
    进入index页面 -
    判断session -
    判断cookie -
    保存到session -
    • 代码实现
    # views.py
    def login_views(request):
        if request.method == 'POST':
            # POST 请求
            # 实现登陆操作
            uphone = request.POST.get('uphone', '')
            upwd = request.POST.get('upwd', '')
            if uphone and upwd:
                user = User.objects.filter(uphone=uphone)
                if user:
                    # 登陆成功
                    if upwd == user[0].upass:
                        # 定义一个响应对象,重定向到index页面中
                        resp = HttpResponseRedirect('/index/')
    
                        # 将登录用户手机号存入session
                        request.session['uphone'] = uphone
    
                        # 判断是否记住密码
                        if 'issaved' in request.POST:
                            # 记住密码则保存cookie
                            resp.set_cookie('uphone', uphone, 86400*365)
                        return resp
                    else:
                        # 判断密码错误!
                        err = '密码错误'
                        return render(request, 'login.html', locals())
                else:
                    # 判断用户名不存在!
                    err = '用户名不存在'
                    return render(request, 'login.html', locals())
            else:
                # 判断用户名或密码为空!
                err = '用户名或密码不能为空'
                return render(request, 'login.html', locals())
        else:
            # GET 请求
            # 判断是否已经处于登录状态
            if 'uphone' in request.session:
                # 有 session 时
                return HttpResponseRedirect('/index/')
            else:
                # 无session
                # 判断cookies中是否有值
                if 'uphone' in request.COOKIES:
                    # cookie 中有值时,取出cookie的值存入 session 中
                    uphone = request.COOKIES['uphone']
                    request.session['uphone'] = uphone
                    return HttpResponseRedirect('/index/')
                else:
                    # cookie 中无值时,进入登录页面
                    return render(request, 'login.html')
    
发布了75 篇原创文章 · 获赞 87 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43883022/article/details/102543459