flask 视图及路由-2

flask 视图及路由 Day2

1.装饰器路由具体实现

flask核心时jinja2模版 werkzeug工具集

werkzeug:Request Response routing模块:(Rule Map BaseConverter MapAdapter )

这里面Map是核心,Map里有Rule、Converter;Map只做记录完成不了具体功能和MapAdapter联合完成路由解析功能

2.request对象常用属性

data 记录请求的数据,转换为字符串
form 请求表单数据
args 查询参数
cookies cookie信息
headers 报文头
method 请求方法
url 请求url地址
files 请求上传的文件

实现各个属性的demo

3.无状态协议http,借助Cookie Session状态保持

Cookie Session

因为http通信借助socket套接字进行通信,每次response之后会关闭当前的连接(http三次握手,四次挥手)。所以http是无状态的协议

cookie由服务端生成,发送给客户端浏览器,浏览器会将cookie的key/value保存,下次请求同一网站时候,每次request请求头中带上cookie

关于浏览器的同源策略:cookie基于域名安全,不同域名cookie不能互相访问,所以百度得不到淘宝的cookie

存在本地的是cookie
存在服务端的是session

过程是:客户端发送登录请求,通过请求报文带登录账户密码,服务器校验账户和密码如果正确给出响应,服务器设置cookie response.set_cookie()把cookie发送给客户端,客户端把cookie保存起来,客户端每次请求,把cookie放在请求头中带着,服务器渠道传过来的cookie,根据cookie就可以知道是否登录,是谁登录

更近一步的说,cookie是可以设置有效期的

服务器设置cookie取cookie

response = make_response//生成个响应
response.set_cookie(‘user_id’,‘1’)//cookie是键值对的形式存储
response.set_cookie(‘user_name’,‘laowang’)

如果要取cookie,在request中取
request.cookie.get(‘user_id’)

要设置cookie有效期
Expires~到期
def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None):

这里max_age设置失效时间r

删除cookie
def delete_cookie(self, key, path='/', domain=None):

存在服务端的session

Session依赖于cookie

客户端向服务端发送登录请求,服务器校验密码保存用户信息到服务器,创建session字典,返回一个作为登录成功区别凭证(cookie:sid)被响应携带上返回给浏览器,每次请求会带上cookie(sid),服务器可以通过取到的cookie取到相应用户信息

还是不太清晰,下面用代码演练session:
app.config[‘SECRET_KEY’] 加密session

app.config['SECRET_KEY'] = 'bdashjbjhasd'

def login()
	#校验成功机制
	session['user_id'] = '1'
	session['user_name'] = 'laowang'
	return('success')

可以看到不用设置cookie,response自动发送设置了cookie到客户端;每次登录response会重新设置cookie,别的页面不变,服务端可以自动转换cookie到session值的一一对应

所以说session依赖于cookie,需要依赖每次的request请求头中coockie带着sessionid

再进一步说,只要能传sessionid就能实现状态保存,就算禁用cookie,url中也可以传sessionid,例如url
http://xxx/sessionid=sdjssadjkasbdhdxhjxash

删除session:因为session是字典来对应的,所以用pop方法删除
session.pop('key',None)

服务端会创建一个.session文件对应sid

4.上下文

上下文相当于一个容器,保存flask程序运行过程中一些信息

request context

请求上下文对象:request session,只有在请求上下文中才可以用这些对象

request: 封装http请求的内容

session: 记录请求会话中的用户信息
session.get('name')获取用户信息
session['name']='laowang'

application context

current_app、g变量

current_app代表当前操作app
g变量作为flask全局的一个临时变量

5.Flask-Script扩展

可以在flask启动时候通过命令行传入参数
from flask_script import Manager

manager = manager(app)

manager.run()

python demo5.py runserver -p 8888 -d

猜你喜欢

转载自blog.csdn.net/JessePinkmen/article/details/84307310
今日推荐