Django中如何区分和操作cookie与session?

2026-06-11 09:281阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1010个文字,预计阅读时间需要5分钟。

Django中如何区分和操作cookie与session?

目录

1.装饰器

2.Django生命周期

3.Cookie

Django中如何区分和操作cookie与session?

- Django获取cookie - Django设置cookie - 通过js设置cookie - Django删除cookie - 应用场景

4.Session

- Django设置session值:可设置多个 - Django获取session值 - Django删除session值

目录

  • 1. 装饰器
  • 2. Django生命周期
  • 3. cookie
    • Django获取cookie
    • Django设置cookie
    • 通过js设置cookie
    • Django删除cookie
    • 应用场景
  • 4. session
    • Django设置session值:可以设置多个
    • Django取session值
    • Django删除session值
    • 其他操作
    • django的session存储位置,配置文件
    • 扩展
    • 应用场景
  • 5. cookie和session的区别

1. 装饰器

装饰器中加入funtools.wraps装饰,能够保留函数的元数据(函数名、注释)

import functools def wrapper(f): @functools.wraps(f) def inner(*args,**kwargs): """ 这是inner函数 """ return f(*args, **kwargs) return inner def index(a1, a2): """ 这是index函数 """ return a1+a2 print(index.__name__) # index print(index.__doc__) # 这是index函数

2. Django生命周期

请求进入Django前,有一个WSGI,能够接收请求,并将请求信息封装。

WSGI(Web Server Gateway Interface)就是一种规范,称为web服务网关接口,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

常用服务器:wsgiref/uwsgi ,本质是一个socket服务端。

过程:

? 客户端发来一个请求,WSGI进行接收,并且将那个请求信息封装,然后经过路由系统进行路由匹配,到达视图views,进行业务逻辑处理,进行相应的orm操作以及模板的渲染。最后通过WSGI发送到客户端。

? 背景:前面学的django,虽然写了很多页面,但是用户不用登陆都是可以看所有网页的,只要他知道网址就行,但是为了自己的安全机制,需要要做验证,访问哪一个网址,都要验证用户的身份,但是还有保证什么呢,用户登陆过之后,还要保证登陆了的用户不需要再重复登陆,就能够访问我网站的其他的网址的页面。但是127.0.0.1:6379", "OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密码",}}}

扩展

django和session相关的配置

SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即: sessionid=随机字符串 SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com 域名 SESSION_COOKIE_PATH = "/" # Session的cookie 保存的路径 SESSION_COOKIE_HTTPONLY = True # 是否 Session的cookie只支持http传输,js不能修改 SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(默认2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每 次请求都保存Session,默认修改之后才保存

django中的session设置过期时间

SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周)

示例:使用装饰器,减少代码重复。

views.py文件

def login(request): """ 用户登录 :param request: :return: """ if request.method == 'GET': return render(request, 'login.html') # 获取登录的用户名和密码 user = request.POST.get('user') pwd = request.POST.get('pwd') # 判断用户名于密码是否存在 user_obj = models.UserInfo.objects.filter(username=user,password=pwd).first() # 用户登录成功 if user_obj: request.session['user_name'] = user_obj.username request.session['user_id'] = user_object.pk return redirect('/index/') return render(request, 'login.html', {'error': '用户名或密码错误'}) def auth(func): def inner(request, *args, **kwargs): name = request.session.get('user_name') if not name: return redirect('/login/') return func(request, *args, **kwargs) return inner @auth def index(request): """ 登录成功后跳转的页面 :param request: :return: """ return render(request, 'index.html')

应用场景

? 用户认证、短信验证过期、权限管理

5. cookie和session的区别

cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带. session是一种存储数据方式,基于cookie实现,将数据存储在服务端(django默认存储到数据库).其本质是: 用户向服务端发送请求,服务端做两件事:生成随机字符 串;为此用户开辟一个独立的空间来存放当前用户独有的值. 在空间中如何想要设置值: request.session['x1'] = 123 request.session['x2'] = 456 在空间中取值: request.session['x2'] request.session.get('x2') 视图函数中的业务操作处理完毕,给用户响应,在响应时会 将随机字符串存储到用户浏览器的cookie中.

本文共计1010个文字,预计阅读时间需要5分钟。

Django中如何区分和操作cookie与session?

目录

1.装饰器

2.Django生命周期

3.Cookie

Django中如何区分和操作cookie与session?

- Django获取cookie - Django设置cookie - 通过js设置cookie - Django删除cookie - 应用场景

4.Session

- Django设置session值:可设置多个 - Django获取session值 - Django删除session值

目录

  • 1. 装饰器
  • 2. Django生命周期
  • 3. cookie
    • Django获取cookie
    • Django设置cookie
    • 通过js设置cookie
    • Django删除cookie
    • 应用场景
  • 4. session
    • Django设置session值:可以设置多个
    • Django取session值
    • Django删除session值
    • 其他操作
    • django的session存储位置,配置文件
    • 扩展
    • 应用场景
  • 5. cookie和session的区别

1. 装饰器

装饰器中加入funtools.wraps装饰,能够保留函数的元数据(函数名、注释)

import functools def wrapper(f): @functools.wraps(f) def inner(*args,**kwargs): """ 这是inner函数 """ return f(*args, **kwargs) return inner def index(a1, a2): """ 这是index函数 """ return a1+a2 print(index.__name__) # index print(index.__doc__) # 这是index函数

2. Django生命周期

请求进入Django前,有一个WSGI,能够接收请求,并将请求信息封装。

WSGI(Web Server Gateway Interface)就是一种规范,称为web服务网关接口,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

常用服务器:wsgiref/uwsgi ,本质是一个socket服务端。

过程:

? 客户端发来一个请求,WSGI进行接收,并且将那个请求信息封装,然后经过路由系统进行路由匹配,到达视图views,进行业务逻辑处理,进行相应的orm操作以及模板的渲染。最后通过WSGI发送到客户端。

? 背景:前面学的django,虽然写了很多页面,但是用户不用登陆都是可以看所有网页的,只要他知道网址就行,但是为了自己的安全机制,需要要做验证,访问哪一个网址,都要验证用户的身份,但是还有保证什么呢,用户登陆过之后,还要保证登陆了的用户不需要再重复登陆,就能够访问我网站的其他的网址的页面。但是127.0.0.1:6379", "OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密码",}}}

扩展

django和session相关的配置

SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即: sessionid=随机字符串 SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com 域名 SESSION_COOKIE_PATH = "/" # Session的cookie 保存的路径 SESSION_COOKIE_HTTPONLY = True # 是否 Session的cookie只支持http传输,js不能修改 SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(默认2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每 次请求都保存Session,默认修改之后才保存

django中的session设置过期时间

SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周)

示例:使用装饰器,减少代码重复。

views.py文件

def login(request): """ 用户登录 :param request: :return: """ if request.method == 'GET': return render(request, 'login.html') # 获取登录的用户名和密码 user = request.POST.get('user') pwd = request.POST.get('pwd') # 判断用户名于密码是否存在 user_obj = models.UserInfo.objects.filter(username=user,password=pwd).first() # 用户登录成功 if user_obj: request.session['user_name'] = user_obj.username request.session['user_id'] = user_object.pk return redirect('/index/') return render(request, 'login.html', {'error': '用户名或密码错误'}) def auth(func): def inner(request, *args, **kwargs): name = request.session.get('user_name') if not name: return redirect('/login/') return func(request, *args, **kwargs) return inner @auth def index(request): """ 登录成功后跳转的页面 :param request: :return: """ return render(request, 'index.html')

应用场景

? 用户认证、短信验证过期、权限管理

5. cookie和session的区别

cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带. session是一种存储数据方式,基于cookie实现,将数据存储在服务端(django默认存储到数据库).其本质是: 用户向服务端发送请求,服务端做两件事:生成随机字符 串;为此用户开辟一个独立的空间来存放当前用户独有的值. 在空间中如何想要设置值: request.session['x1'] = 123 request.session['x2'] = 456 在空间中取值: request.session['x2'] request.session.get('x2') 视图函数中的业务操作处理完毕,给用户响应,在响应时会 将随机字符串存储到用户浏览器的cookie中.