flask基础,flask框架是用来干什么的

  flask基础,flask框架是用来干什么的

  Session:

  默认情况下,flask将会话以加密的形式放在浏览器cookie中。Flask的会话是一个字典,字典有自己的方法。Flask session原理:当请求进来时,Flask会读取cookie中session对应的值(在配置文件中可以更改名称),将这个值解密反序列化到一个字典中放入内存中,供view函数使用;在视图函数中使用时,按照字典法使用;当请求完成后,flask会读取内存中字典的值,通过序列化进行加密,然后写入用户的cookieflash:

  #闪光灯拍一次,没有;#基于session实现的原理:在session中存储一条数据,读取时通过pop移除,达到只能取一次的效果。从闪存导入get _ flashed _ messages闪存(临时数据存储,错误)#保存闪存;“Error”表示类别get _ flash _ messages()#在flash中取值;列表的形式;get _ flash _ messages(category _ filter=[ error ])表示根据分类选择flash特殊装饰器:(重点)

  **1.@app.before_request #请求前执行的所有操作;修饰函数没有参数和返回值;类似Django的process _ request 2。模板3的@ app.template _ global () #。模板**4的@app.template_filter() #。@app.after_request #修饰函数应该有参数和返回值;类似Django的process _ response @ app . after _ request def test(response):print( after _ request )对多个@ app.before _ requests返回response #,谁定义谁先执行;对于多个@ app.after _ requests,谁先定义谁,然后执行;类似Django中间件# For before_request的执行顺序,可以在定义自己的逻辑时添加一个返回值,这样后面的before_request和view就不会执行,而是全部执行after _ request也会被执行;这和Django(1.10以后的版本)不一样。5.@app.before_first_request #只执行第一个请求。6.@app.errorhandler(错误代码)#报告错误时执行的函数;可用于自定义错误消息(page)@ app . error handler(404)def not _ found(arg):# arg是错误消息print(arg)返回 not foundBlueprint:蓝图

  样本目录:

  CRM -CRM -_ _ init _ _。py #实例化Flask等等-views -account . py -user . py -manage.py #入口函数manage . py

  从CRM导入create _ app app=create _ app()if _ _ name _ _= _ _ main _ :app . Run()#运行实例crm/__init__。一瓶

  从flask导入Flaskfrom .views.account导入acfrom .views.user导入uc def create _ app():app=Flask(_ _ name _ _)# @ app . before _ request # Global before _ request # defx 1():# print( app . before _ request )app . register _ blue print(AC)app . register _ blue print(UC,url _ prefix=/API) #在UC的这个蓝图的url上加一个前缀return app crm/views/account.py,

  从flask导入蓝图,render _ template AC=blue print( AC ,__name__) #实例化一个蓝图@ac.before_request # Only将before _ request def x1()添加到此蓝图的AC:print( app . before _ request )@ AC . route(/log in )def log in():return render _ template( log in . html )@ AC . route(/Logout )def Logout():return Logout CRM/views/user . py

  从flask导入蓝图UC=blueprint (UC ,_ _ name _ _)@ UC . route(/list )def list():return list @ UC . route(/detail )def detail():返回 detail 蓝图的函数:

  1.目录结构的划分2。前缀路径3。某些应用的装饰路由的正则匹配:(视图)

  # 1.首先定义一个类:regex转换器(基本转换器)# 2。app . URL _ map . converters[ reg ]=regex转换器# 3。用户发送请求# 4。使用自定义规则:@ app . route(/index/reg( \ D ):NID )def index(NID):print(NID,type (nid) print (url _ for (index ,nid=987) #返回生成的url时,会自动触发RegexConverter的to_url方法# 4。常规匹配将在5号烧瓶内进行。to _ python方法的返回值。

  1.请求2。session #注意:默认情况下,Flask将会话以加密的形式放在浏览器cookie中。3.附录4。g请求-查看-响应一般流程:

  当请求到达时:# ctx=requestcontext (self,environ) # self是一个app对象,environ表示与请求相关的原始数据# ctx . request=request(environ)# CTX . session=none #将包含请求和会话的CTX对象打包放在某个地方(相当于一个大字典;根据线程或协程添加唯一标识符,这样数据就相互隔离了){1232:{ctx:ctx object},}查看函数:从flash导入请求,session #以上代码背后的过程:根据当前线程或协程的唯一标识符获取ctx对象,然后获取请求结束和会话请求:根据当前线程的唯一标识符,从大字典中删除该线程对应的数据。上下文管理-请求:

  # 1.wsgi:初步处理请求# 2。__call__ method - wsgi_app方法# 3。wsgi_app方法:ctx=requestcontext (session,request) ctx.push () # 4。LocalStack:将CTX对象添加到Local (Local Stack充当中介:put Local当函数取值时,它也从Local Stack中取值,但不是直接从Local中取值。) # 5.Local:为每个线程或协程开辟一个隔离的内存空间;本地对象有_ _ storage _ _={线程/进程的唯一ID:{ stack :[CTX object(请求和会话),]}}上下文管理-会话:

  #通过LocalStack获取ctx中的session并给session赋值(从cookie中读取数据,解密并反序列化;调用open_session()方法)来添加:

  # Flask和Django的比较:相似之处:都是基于wsgi协议编写的。最大的区别:请求的机制不同:请求相关数据,Django通过参数传递逐个传递;Flask就是把请求相关的数据放在“一个地方”(大字典),以后再来这里取相应的数据#全局变量在初始加载时只执行#类中__slots__()的函数:只允许这个类的实例在__slots_()中添加属性上下文管理:

  # Flask第三方组件- flask-session:可以将会话保存到redis进行安装:

  使用安装闪存会话:

  IMPORT redis From Flask IMPORT Flask,From Flask-SESSION IMPORT SESSION # IMPORT SESSION app=Flask(_ _ name _ _)app . config[ SESSION _ type ]= redis # 3 .根据下面的分析,应该先在配置文件中配置session _ type此时app . session _ interface=redissioninterface();在redis session接口中还有两个方法,open_session和save_session。app . config[ session _ redis ]=redis . redis(主机= 127.0.0.1 ,端口=6379,密码=) # 4。配置会话的Redis#通过这些操作,会话将被保存。此时浏览器中保存的cookie是一个随机字符串(uuid.uuid4()),当请求到达时,使用这个cookie(随机字符串)获取session# 1。flask的默认会话处理是通过app . session _ interface=secure cookie session interface()session(app)# 2。app被Session实例化后,app.session _ interface=self。_ get _ interface(app);保存会话的位置与配置文件中的“SESSION_TYPE”相关。

  转载于:https://www.cnblogs.com/neozheng/p/10150644.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: