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'

原文地址:https://www.cnblogs.com/xuqidong/p/13121813.html