Python之后端Django(五)

Day/5

"session的概念":它是基于cookie实现的,它是存储在服务器端的,sessionID会被存储到客户端的cookie中

"原理"

第一次请求的过程

1.用户第一次请求服务器的时候,服务器根据用户提交的相关信息,校验无误后创建对应的

Session

2,在设置Session的同时(此处做了两件事:sessionID会被服务器塞到响应的头部,生成session信息),服务器会在响应头中设置唯一标识信息SessionID

返回给浏览器

3,浏览器接收到服务器返回的sessionID信息后,会将此信息存入到Cookie中,同时Cookie

记录此SessionID属于哪个域名

第二次及其之后的过程

4,当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在Cookie信息,如果存在自

动将Cookie信息也发送给服务端,服务端会从999的2弗赫02征裙视摄根据sessionID查找

对应的Session信息,如果没有找到说明用户没有登录或者登录失效,如果找到Session证明用户已

经登录可执行后面操作

#核心:sessionID是连接Cookie和session的一道桥梁

#注意:第一次设置session的时候就可以读取到

问题:为什么session_id需要通过请求对象去获取或者设置,请求对象可是通过客户端发出去的?

1、session依赖于cookie

2、当读取session的时候,需要通过请求对象带来的cookie中的session_id去读取数据库中的session信息,如果读取不到则代表session失效或者并未生成

3、当设置session的时候,会生成一个session_id,服务器会通过response对象设置到cookie当中,并保存到浏览器里

其他操作:

1、清除所有session,在存储中删除值部分·

request.session.clear()

2、清除session数据,在存储中删除session的整条数据·

request.session.flush()

3、删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']

4、设置session的有效期

request.session.set_expiry(value) 默认是两周

类视图:

"问题":过去,一个视图中可以使用分支结构处理两种业务逻辑,但是可读性和复用性很差!

"解决思路":django使用了类视图

"类视图使用方式":

1、必须继承父类View #需要导包 from django.views.generic import View

2、在子路由中需要使用as_view() 添加

语法格式固定 views.类名.as_view() # 返回的是一个视图函数名

3、必须有返回值

"语法格式":

类视图view写法:

python 复制代码
from django.views.generic import View
class Registerview(View):
  ""类视图:处理注册"""
  def get(self,request):
    ""处理GET请求,返回注册页面""
    return render(request,'register.html')
  def post(self,request):
    """处理POST请求,实现注册逻辑"""
    return HttpResponse('这里实现注册逻辑')

路由写法:

python 复制代码
urlpatterns[
  #视图函数:注册
  url(r'register/$',views.register,name='register'),
  #类视图:注册
  url(r'register/$',views.RegisterView.as_view(),name='register'),
]

中间件:

"概念":是介于request和response处理之间的一道处理过程,它位于web服务端和url路由层之间

官方网址:https://docs.djangoproject.com/en/3.1/topics/http/middleware/

"执行程序":请求自上而下,响应自下而上

'语法格式':

python 复制代码
def simple middleware(get_response):
  #此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
  def middleware(request):
  #计处编写的代码会在每个请求处理视图前被调用。
    response get_response(request)
    #此处编写的代码会在每个请求处理视图之后被调用·
    return response
  return middleware

例子:在users应用中新建一个middleware.py文件

python 复制代码
def my_middleware(get_response):
  print('init被调用')
    def middleware(request):
    print('before request被调用')
    response get_response(request)
    print('after response被调用')
    return response
  return middleware

"关于中间件的注意事项":

1、中间件的书写位置没有强制要求,每个公司有自己的规定

2、写好的代码需要注册,在settings.py中的MIDDLEWARE参数里注册

注册的语法格式(固定):子应用名.手动创建的中间件的文件名.文件内定义的函数名

相关推荐
alvin_200517 分钟前
python之OpenGL应用(二)Hello Triangle
python·opengl
蜡笔小炘21 分钟前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长25 分钟前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
铁蛋AI编程实战26 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
jiang_changsheng38 分钟前
RTX 2080 Ti魔改22GB显卡的最优解ComfyUI教程
python·comfyui
Re.不晚1 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设1 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
0思必得01 小时前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
麦聪聊数据2 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
沈浩(种子思维作者)2 小时前
系统要活起来就必须开放包容去中心化
人工智能·python·flask·量子计算