当前位置:   article > 正文

Flask框架详细上下文管理机制_flask使用create_app,没有上下文

flask使用create_app,没有上下文

Flask

flask和django的区别

  1. Django功能大而全,Flask只包含基本的配置;

  2. Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。

    与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。

  3. Flask 比 Django 更灵活 ,

  4. flask非常适用于开发API接口

一、flask配置文件

  1. 导入类的配置文件(导入类的路径)

    • 方法

      1. 首先创建一个PY文件,写一个类,类中写一些配置信息的静态字段

      2. app.config.from_object("python类或类的路径")

        def from_object(self, obj):
            if isinstance(obj, string_types):	# 判断是否是字符串
                obj = import_string(obj)		# 利用import_module封装的函数拿到类
                for key in dir(obj):			# 遍历自己写的配置类
                    if key.isupper():			# 判断类的属性是不是大写
                        self[key] = getattr(obj, key)	# 保存进配置信息
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
    • 原理

      1. 利用importlib模块中的import_module函数:

        o = importlib.import_module("aa.bb")

      2. 利用getattr('var1')获取类中或者模块中的属性

      3. 获取到类之后遍历类的属性,在利用getattr()获取所有大写的类的静态变量,写进config配置文件字典

二、路由系统

  • 方式一

    @app.route('/user/<username>')
    @app.route('/post/<int:post_id>')
    @app.route('/post/<float:post_id>')
    @app.route('/post/<path:path>')
    @app.route('/login', methods=['GET', 'POST'])
    
    # 路由中的数据类型
    DEFAULT_CONVERTERS = {
         
        'default':          UnicodeConverter,
        'string':           UnicodeConverter,
        'any':              AnyConverter,
        'path':             PathConverter,
        'int':              IntegerConverter,
        'float':            FloatConverter,
        'uuid':             UUIDConverter,
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 方式二

    def index():
        pass
    app.add_url_rule('/', 'index', index)
    
    '''
    add_url_rule(self,rule,endpoint=None,view_func=None,
                 provide_automatic_options=None,**options)
                 
    rule-----------------------------URL规则为字符串
    endpoint-------------------------字符串,端点名字,不设置默认为函数名
    view_func------------------------函数名
    provide_automatic_options-------- 未设置provide_automatic_options,则进入默认的OPTIONS请求回应,否则请求endpoint匹配的函数执行,并返回内容
    options -------------------------请求方式,options=['GET','POST']
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 规则

    属性 说明 示例
    Truestrict_slashes False不严格,True严格,默认=None @app.route('/index',strict_slashes=False)
    redirect_to 重定向到指定地址 @app.route('/index/<int:nid>',redirect_to='/home/<nid>'
    @app.route('/index/<int:nid>', redirect_to=func)
    subdomain 子域名访问(必须配置’SERVER_NAME’) app.config['SERVER_NAME'] = 'wupeiqi.com:5000'
    @app.route("/", subdomain="admin")
    子域名带正则 @app.route("/dynamic", subdomain="<username>")
    def username_index(username)

自定义正则路由

三、蓝图

  • 好处:
    1. 目录结构的划分
    2. 可以单独给一个蓝图加前缀
    3. 应用特殊装饰器-before_request

创建蓝图

  1. 创建一个和项目名相同的文件夹 (” crm“ ------文件夹)

  2. 在新文件夹(” crm“)内创建__init__.py文件,并在里面实例化

    from flask import Flask
    def create_app():
        app = Flask(__name__)  # 实例化flask
        return app
    
    • 1
    • 2
    • 3
    • 4
  3. 创建主程序文件xxx.py

from crm import create_app # 导入自己写的实例化flask文件
app = create_app()
if __name__ == '__main__':
    app.run()
  • 1
  • 2
  • 3
  • 4
  1. 在新文件夹(” crm“)中创建视图文件夹 views

  2. 在视图文件夹 views下可创建多个视图python文件

    例:account.py

    from flask import Blueprint  # 导入蓝图
    
    ac = Blueprint('ac',__name__)   # 创建蓝图对象
    
    @ac.route('/login')
    def login():
        return 'login'
    
    @ac
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/501416
推荐阅读
相关标签
  

闽ICP备14008679号