首页 > 其他 > 详细

Flask项目结构

时间:2020-06-13 21:48:13      阅读:44      评论:0      收藏:0      [点我收藏+]
上节回顾:
    -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
            
        
            
            
            
            
            
            
            
            
        

 

Flask项目结构

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!