Flask项目结构
上节回顾: -1 配置 -0 app.debug= -第一种:app.config['DEBUG']=True -第二种: -app.config.from_pyfile('py文件') **** -from_json -from_object:可以传类 ***** -路由: -典型写法:@app.route('/index',methods=['GET'],endpoint='别名,不能重复') -路由本质:app.add_url_rule() -参数:了解 -自定义转换器(支持正则) -CBV -cbv加装饰器:decorators = [auth, ] -模板: -支持执行函数,并传参数 -safe -请求响应: -request: -args -from -method -files -response -三件套:直接返回字符串,返回重定向,返回页面 -jsonfy---返回json格式 -往里写cookie -res=make_response('ok') -res.set_cookie() -session -session['user']=lqz 设置值 -user=session['user'] 取值 -del session['user'] -session.pop('user') -闪现(错误信息展示) -flash('',category='xx') -get_flashed_messages(category_filter=['x1']) -请求扩展: -before_request:django中:process_request -after_requets:django中:process_response -before_first_request:第一次请求走 今日内容: -请求扩展: -errorhandler -@app.errorhandler(404) def error_404(err): print(err) return '404错误' @app.errorhandler(500) def error_500(err): return '500错误' -标签和过滤器 定义: -@app.template_global() def add(a,b): return a+b @app.template_filter() def add2(a,b,c,d): return a+b+c+d 使用: {{add(1,2)}} {{1|add2(2,3,4)}} -teardown_request 每次请求走,都会走它,包括视图函数出了异常 -中间件(了解) from flask import Flask,render_template app = Flask(__name__) app.debug=True class MyMiddle(): def __init__(self,wsgi_app): self.wsgi_app=wsgi_app def __call__(self, *args, **kwargs): # 写代码 obj=self.wsgi_app #写代码 return obj @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': # app.__call__ app.wsgi_app=MyMiddle(app.wsgi_app) app.run() -蓝图 -对程序进行目录划分 -蓝图使用: -第一步:生成一个蓝图 from flask import Blueprint # 1 创建一个蓝图 order_blue=Blueprint('order',__name__,url_prefix='/app02') -第二部:使用 @order_blue.route('/order') -第三步:注册 from flask_test.views import order from flask_test.views import user app.register_blueprint(order.order_blue) app.register_blueprint(user.user_blue) -中小型项目: -工程名 -项目名(app01) -templates -static -views -user.py -order.py -manage.py -大型项目 -详见代码 -蓝图的befort_request,对当前蓝图有效 -session源码分析 -请求来了,生成一个空session放到ctx中:ctx = self.request_context(environ) -ctx.push(): if self.session is None: session_interface = self.app.session_interface # 正常情况下session中有值了 # 什么情况下没有:请求中没有cookie,session仍为空 #从cookie中取出value,(有解密过程)转成session对象 self.session = session_interface.open_session( self.app, self.request ) if self.session is None: # 生成一个空session self.session = session_interface.make_null_session(self.app) -请求走了: -self.full_dispatch_request() -1 执行before_request -2 执行视图函数 -3 把session写入 -if not self.session_interface.is_null_session(ctx.session): self.session_interface.save_session(self, ctx.session, response) threading.local: -自定义一个Local,支持线程和协程 -请求上下文,应用上下文 -请求上下文:session和request -应用上下文:current_app和g
pipreqs ./ --encoding='utf8'