Django框架-cookie与session

from django.shortcuts import redirect
from django.shortcuts import render
from login import models  # 获取类才能orm操作库

"""
cookie与session解决登录验证
1、models中创建UserInfo类    python  manage.py  makemigrations login /migrate login --database=login_db
2、urls.py全局中配置app的urls  url(r‘^login/$‘, include(‘app_name.urls‘))   from django.conf.urls import url,include
3、在app下的views.py 创建视图函数
需求:登录除登录页面外,都需要登录才行!!!
思路:
1、用户打开页面,判断用户是否登录,已登录则直接打开,未登录则跳到登录页面登录
2、用户登录完成后,跳转到用户第一次访问时想要的页面
3、故实现上步需要提前获取用户要访问的页面url地址,保存下来
4、用户第一次登录时给用户配置一个cookie设置一个key:value保存状态
"""

# 通过cookie解决登录验证
# 保存状态,服务器产生,让浏览器存放在浏览器端,一组组键值对,4096字节长度,不够大,不安全
# 校验登录装饰器
def check_login(func):
    def inner(request, *args, **kwargs):
        """获取用户想访问的url保存下来,判断cookie状态,确认用户是否登录"""
        print(request.path)
        return_url = request.path_info  # 获取用户第一次访问的url,不含域名及参数
        # if request.COOKIES.get(‘is_login‘, "") == ‘True‘:  # 获取cookie,比较值,如果符合,说明已经登录,跳转到用户需求页面
        if request.session.get(‘is_login‘, "") == ‘True‘:  # session

            ret = func(request, *args, **kwargs)  # 忘了写request参数,from表单里忘了{%csrf_token%}
        else:
            # 如何不符合跳转登录,且将用户想访问的url拼接到登录url后面,博客园就是这么做的
            ret = redirect(‘/login/sigin/?ReturnUrl={}‘.format(return_url))
        return ret

    return inner

def login(request):
    """验证用户,及配置cookie"""
    err_msg = ""
    if request.method == ‘POST‘:
        username = request.POST.get(‘username‘).strip()
        password = request.POST.get(‘password‘).strip()  # 获取前端传过来的用户名和密码
        if not username or not password:
            err_msg = "用户名或密码不能为空"
            return render(request, ‘app_login.html‘, {‘err_msg‘: err_msg})
        db_select = models.UserInfo.objects.filter(name=username, password=password)
        if db_select:  # 如果正确的话,需要设置cookie相当于一个flag,设置cookie必须时response对象
            return_url = request.GET.get(‘ReturnUrl‘, ‘/login/index/‘)  # 获取用户要访问的页面,如果一开始就直接登录页面的话,成功后我们设置自动跳到index
            ret = redirect(return_url)  # 跳转到用户未登录前要访问的页面
            # ret.set_cookie(‘is_login‘, ‘True‘)  # 设置cookie以dict形式保存,请求后可以F12查看
            request.session[‘is_login‘] = ‘True‘  # session
            return ret  # 就跳到用户想的要的页面,否则回到登录页面
        else:  # 用户名密码错误的话,提示错误,还是返回登录页面
            err_msg = ‘用户名或密码错误,请重新登录‘
    return render(request, ‘app_login.html‘, {‘err_msg‘: err_msg})

@check_login
def logout(request):  # 退出就跳到登录页面
    rep = redirect(to=‘/login/sigin/‘)
    # rep.delete_cookie(‘is_login‘)
    request.session.delete()   # session的删除方法
    return rep

@check_login
def index(request):
    return render(request, ‘app_index.html‘)

@check_login
def home(request):
    return render(request, ‘app_home.html‘)

# 问题?
# 为什么post请求中可以通过return_url = request.GET.get(‘ReturnUrl‘, ‘/login/index/‘)

原文地址:https://www.cnblogs.com/sunxiuwen/p/9672018.html

时间: 2024-10-07 05:16:35

Django框架-cookie与session的相关文章

[py][mx]django的cookie和session操作

这玩意可以实现7天免登录等功能. session和cookie机制原理和交互过程 交互过程 ① 客户端访问,无服务端写入的Cookie ② 服务端的Cookie写入浏览器 ③ 浏览器解析Cookie,保存至浏览器文件 ④ 客户端访问,有服务端写入的Cookie ⑤ 服务器获取 django请求中的cookie 第一次访问服务端会给一个csrf的cookie 登录完成后,默认给一个为期半个月的cookie 用于访问别的也没使用. django中cookie与session的实现原理 app默认注册

十一、Django的cookie和session

一.Django的cookie和session 一.会话 会话可以理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的多个请求中,需要共享数据,就是会话跟踪技术.比如你在登陆银行主页,请求登录.请求取款.请求转账.请求还款...,在这个会话中,当前的用户信息必须在这个会话中是共享的,因为登录的是你,那么取款转账时一定是相对你的取款转账 .这就说明我们必须在一个会话过程中有共享数据的

Django组件——cookie与session

Django组件--cookie与session 一.会话跟踪技术 1.什么是会话跟踪技术 先了解一下什么是会话.可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打电话,你就是客户端,而10086服务人员就是服务器,从双方接通电话那一刻起,会话就开始了,到某一方挂断电话就表示会话结束.在通话过程中,你会向10086发出多个请求,这多个请求都在一个会话中. 在JavaWeb在,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览

pyhton框架Django之cookie和session

一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文件夹下.保存在浏览器端的键值对可以利用做登录 浏览器下的cookei: Session Django的Session机制会向请求的浏览器发送cookie字符串.同时也会保存到本地一份,用来验证浏览器登录是否为同一用户.它存在于服务器,Django默认会把session存入到数据库中. Session

django的cookie和session以及内置信号、缓存

cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览器客户端的,而session是存放在服务器端的 cookie的基本操作 cookie增删改查操作 1.设置Cookies response.set_cookie("cookie_key","value") 2.获取Cookies value = request.COOK

Django中cookie和session

cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要"保持状态".因此cookie就是在这样一个场景

Django之cookie 与session组件

一.会话跟踪技术 1.1 什么是会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中. 在Web中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的多个请求中共享数据

Django之Cookie,Session

COOKIE Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要“保持状态”.因此Cookie就是在这样一个场景下诞生.

Django之Cookie、Session、CSRF

Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)     参数:         default: 默认值            salt: 加密盐         max_age: 后台控制过期时间 2.设置Cookie: 1 2 3 4 5 6 7 8 9 10 11 12 13 rep