• Flask之蓝图


    一、什么是蓝图

      蓝图的基本设想是它们记录注册到一个应用时的操作执行情况。 当从一个端点到另一端分发请求和生成 URL 时,Flask 关联视图函数和蓝图。也就是随着我们开发程序越来越大,将代码进行模块化管理。我们之前可能是将所有代码都写在一个py文件,例如:

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/home')
    def home():
        return "home"
    
    
    @app.route('/login')
    def login():
        return "login"
    
    
    if __name__ == '__main__':
        app.run()

      随着功能越来越多,功能之间也需要进行区分,此时我们可以将同一功能的模块写在一个py文件,这样可以将这一个py文件当作一个蓝图,然后每一个蓝图注册到app中就可以了。

    二、简单项目结构设计

    I:.
    │  run.py
    │
    ├─.idea
    │  │  encodings.xml
    │  │  flaskPro.iml
    │  │  misc.xml
    │  │  modules.xml
    │  │  workspace.xml
    │  │
    │  └─inspectionProfiles
    │          Project_Default.xml
    │
    └─flaskPro
        │  __init__.py
        │
        ├─statics
        │      home.css
        │
        ├─templates
        │      home.html
        │      login.html
        │
        ├─views
        │  │  account.py
        │  │  blogs.py
        │  │
        │  └─__pycache__
        │          account.cpython-35.pyc
        │          blogs.cpython-35.pyc
        │
        └─__pycache__
                __init__.cpython-35.pyc

    这是flask项目flaskPro下的树形结构,可以看到主要是run.py文件和flaskPro包。

    1、run.py

    这是整个项目的入口文件,启动项目就从这个文件开始。

    from flaskPro import app  #从flaskPro 包导入app对象
    
    
    if __name__ == '__main__':
        app.run()

    2、flaskPro 

    run.py中的app对象就是从这个包导入的,首先就是在这个包中的__init__.py文件中:

    from flask import Flask
    
    # 将Flask进行实例化,传入响应的参数,其中static_url_path是静态文件地址路径
    app = Flask(__name__,template_folder='templates',static_folder='statics',static_url_path='/static')
    
    # 将所有的蓝图导入进来,相当于汇总
    from .views.account import account
    from .views.blogs import blogs
    
    # 将所有的蓝图再注入到app中,这样进行同一,请求一旦进来,由app统一分发
    app.register_blueprint(account) #不加前缀 http://127.0.0.1:5000/login
    app.register_blueprint(blogs,url_prefix='/blogs') #可以加入前缀,http://127.0.0.1:5000/blogs/home

    可以看到在这个文件中主要做下面几件事:

    • 实例化Flask对象app
    • 导入所有的蓝图
    • 将蓝图注入到app对象

    那么,这个包中剩下的views、templates、statics目录分别是蓝图文件、模板文件、静态文件。比如,views中的blogs蓝图文件:

    from flask import Blueprint
    from flask import render_template
    from flask import request
    
    
    blogs = Blueprint('blogs',__name__)
    
    @blogs.route('/home')
    def home():
        return render_template('home.html')

    templates文件中home.html文件:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link href="/static/home.css"  type="text/css" rel="stylesheet">
    </head>
    <body>
    <h1>home</h1>
    </body>
    </html>

    这就是通过蓝图设计一个简单项目的结构。

    三、复杂项目结构设计

    I:.
    │  run.py
    │
    ├─.idea
    │  │  encodings.xml
    │  │  flaskPro2.iml
    │  │  misc.xml
    │  │  modules.xml
    │  │  workspace.xml
    │  │
    │  └─inspectionProfiles
    │          Project_Default.xml
    │
    └─flaskPro2
        │  __init__.py
        │
        ├─admin
        │  │  views.py
        │  │  __init__.py
        │  │
        │  ├─statics
        │  ├─templates
        │  └─__pycache__
        │          views.cpython-35.pyc
        │          __init__.cpython-35.pyc
        │
        ├─web
        │  │  views.py
        │  │  __init__.py
        │  │
        │  ├─statics
        │  ├─templates
        │  └─__pycache__
        │          views.cpython-35.pyc
        │          __init__.cpython-35.pyc
        │
        └─__pycache__
                __init__.cpython-35.pyc

    这是flask项目flaskPro2下的树形结构,可以看到主要是run.py文件和flaskPro2包。

    1、run.py

    这是整个项目的入口文件,启动项目就从这个文件开始。

    from flaskPro2 import app  #从flaskPro2 包导入app对象
    
    
    if __name__ == '__main__':
        app.run()

    2、flaskPro2 

    run.py中的app对象就是从这个包导入的,首先就是在这个包中的__init__.py文件中:

    from flask import Flask
    from .admin import admin
    from .web import web
    
    
    app = Flask(__name__)  #app对象
    
    # 注入蓝图
    app.register_blueprint(admin,url_prefix='/admin')
    app.register_blueprint(web,url_prefix='/web')

    注意的是这里的每一个蓝图又相当于是每一个app一样。比如web蓝图,在web包的__init__.py文件中创建蓝图对象:

    from flask import Blueprint
    
    
    web = Blueprint(
        'web',
        __name__,
        template_folder='templates',
        static_url_path='static'
    )  #每一个蓝图有自己独立的模板文件夹和静态文件夹
    
    from . import views #这里的views文件是必须导入的,否则不执行views中路由注入,会导致找不到web下的路由

    在views.py文件中:

    from . import web
    
    @web.route('/home')
    def home():
        return 'home'

    其余的蓝图与这个是一样的。

  • 相关阅读:
    Python循环语句
    Python简单的语句组
    Jedis 之 初始<一>
    微信小程序登入流程
    微信小程序发起请求
    django数据库迁移时候异常
    Git常用命令总结
    微信小程序自定义组件
    POJ3345 Bribing FIPA
    POJ1947 Rebuilding Roads
  • 原文地址:https://www.cnblogs.com/shenjianping/p/13258395.html
Copyright © 2020-2023  润新知