[py]flask蓝图的使用

参考

flask挺挺轻巧的, 因此玩一玩它. 如果用它做大型点的项目, 就用到了它的蓝图组织项目. 一时半会不太清楚这玩意怎么用, 得撸一撸py基础了.

我搞了个movie小的flask栗子来用用蓝图小功能, git地址如下.
项目分前台 home, 后台admin模块.使用蓝图来组织.

https://github.com/lannyMa/movie

首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化、大项目协同开发过程中的一个很好的工具.

1.下图是我们通常情况下使用的项目组织结构


看一下视图方法:

#views.py
from app import app

@app.route('/user/index')
def index():
    return 'user_index'

@app.route('/user/show')
def show():
    return 'user_show'

@app.route('/user/add')
def add():
    return 'user_add'

@app.route('/admin/index')
def adminindex():
    return 'admin_index'

@app.route('/admin/show')
def adminshow():
    return 'admin_show'

@app.route('/admin/add')
def adminadd():
    return 'admin_add'

从视图方法中,我们看到有6个视图,分别对应admin,user两个不同用户的3个功能index,add,show.
这样写显然没问题,但是明显与python提倡的模块化,优雅的代码特点相违背,即不是很python的python代码.

让我们在这里假想两个问题:

  • 1.如果admin和user不止只有3个功能呢,比如好几百个,导致views的代码量已经达到了上万行?
  • 2.如果我们有多个同事分工开发admin,user和其它可能的模块呢,都同时往一个views里写代码吗,在做版本控制时,提交过程中频繁出现提交冲突了怎么办?
  • 3.加入我们要抛弃admin或者user功能块时怎么办,要一一手动删除所有admin或是user相关的代码吗,这样当然可以,但是会不会太low呢?

当然根据Pythonic特点,我们肯定希望尽可能的把代码尽量的模块化,让我们的代码看起来更加的优雅和顺畅,这个时候flask.Blueprint(蓝图)就派上用场了

什么是蓝图?

一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合。

我什么时候会用到蓝图?

蓝图的杀手锏是将你的应用组织成不同的组件,比如把这里的admin,user相关的视图方法分为两个组件,一个是admin组件,一个是user组件.这时我们可以

创建两个蓝图实现这两个独立的组件.

# 2.我们如何使用蓝本将上述的视图方法看上去更加pythonic呢?

由于上面的例子中只有两个组件(模块)admin,user,我们可以创建名为admin.py和user.py的两个文件,分别在里面创建两个蓝图的实例对象admin,user.

直接上代码:

#admin.py
from flask import Blueprint,render_template, request

admin = Blueprint('admin',__name__)

@admin.route('/index')
def index():
    return render_template('admin/index.html')

@admin.route('/add')
def add():
    return 'admin_add'

@admin.route('/show')
def show():
    return 'admin_show'

要想创建一个蓝图对象,你需要import flask.Blueprint()类并用参数name和import_name初始化。import_name通常用__name__,一个表示当前模块的特殊的Python变量,作为import_name的取值。

#user.py
from flask import Blueprint, render_template, redirect

user = Blueprint('user',__name__)

@user.route('/index')
def index():
    return render_template('user/index.html')

@user.route('/add')
def add():
    return 'user_add'

@user.route('/show')
def show():
    return 'user_show'

好了,视图函数已经分开了,我们如何使用它们的呢?再来看一下我们的views.py变成了什么样吧?

#views.py
from app import app
from .admin import admin
from .user import user

#这里分别给app注册了两个蓝图admin,user
#参数url_prefix='/xxx'的意思是设置request.url中的url前缀,
#即当request.url是以/admin或者/user的情况下才会通过注册的蓝图的视图方法处理请求并返回
app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')
  • 现在我们的views是否已经变得很简单了呢?顺便回答第三个问题,如果想弃用某一个组件(模块)我们只需要相对应的注释掉给app注册蓝图的行即可.
  • 细心的伙伴还可以发现,在views.py中在使用默认endpoint的前提下,我们是没有办法使用同一个视图方法名的(当然我们也不建议在同一个文件中有两个视图方法名相同,
  • 尽管指向他们的request.url不同),但是使用了蓝图之后我们就可以在不同模块中使用相同的方法名了,例如add,show..

3.到此我们就可以通过浏览器测试我们的程序


4.附上使用蓝图后的项目组织结构

当然如果项目不大的话就没有什么必要使用蓝图了,甚至我们可以把除了所有css,js,html的代码都写到一个文件中去,这里我们不在举例,说明.

原文地址:https://www.cnblogs.com/iiiiiher/p/8370913.html

时间: 2024-11-09 06:26:44

[py]flask蓝图的使用的相关文章

flask 蓝图

转自:http://spacewander.github.io/explore-flask-zh/7-blueprints.html 蓝图 什么是蓝图? 一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合.举个例子,想象一下我们有一个用于管理面板的蓝图.这个蓝图将定义像/admin/login和/admin/dashboard这样的路由的视图.它可能还包括所需的模板和静态文件.你可以把这个蓝图当做你的应用的管理面板,管它是宇航员的交友网站,还是火箭推销员的CRM系统. 我什么时候会用到

Flask蓝图目录、Flask-SQLAlchemy、Flask-Script、Flask-Migrate

一.Flask蓝图目录 我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Flask小型应用的项目结构目录示例,如下: 如图,这就是我们建立好的一个目录结构,一层一层的看一下,首先是app目录,它就是我们的主应用程序目录了,其中有一个__init__.py文件,里面的内容如下: from flask import Flask from .views.acc import acc_bp from .views.user import

Flask 蓝图进行路由分发

Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处理分过来的url,如创建music.py from flask import Blueprint music = Blueprint('music', __name__) @music.route("/") # 即 /music/ def roo(): return "music

flask蓝图的使用

首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化.大项目协同开发过程中的一个很好的工具. 1.下图是我们通常情况下使用的项目组织结构 看一下视图方法: #views.py 1 from app import app 2 3 4 @app.route('/user/index') 5 def index(): 6 return 'user_index' 7 8 @app.route('/user/show') 9 def show(): 10 return 'user_show' 11

Python Flask 蓝图Blueprint

1. 目录结构 2. manage.py类似于django中manage import fcrm if __name__ == '__main__': fcrm.app.run(port=8001) 3. fcrm下面的__init__.py文件 from flask import Flask from .views import account #导入fcrm.views目录下account.py模块, from .views import order #导入fcrm.views目录下orde

Flask - 蓝图和子域名

 蓝图: 之前我们写的 url 和视图函数都是在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这个需求.例如: from flask import Blueprint bp = Blueprint('user', __name__, url_prefix='/user/') @bp.route('/') def index(): return u"用户首页" @bp.route('/profile/'): def profile(): return

flask蓝图

1.概念 蓝图可以使我们的程序更加模块化,不同功能的路由可以放在不同的模块下,最后集中到启动类中 它的作用就是将功能和主服务分开,类似django中我们创建的每一个app 2.蓝图常见架构方式 2.1 功能式架构 按照每部分的功能来组织应用,模板放在同一文件夹,视图存放同一文件夹 yourapp/ __init__.py static/ templates/ home/ control_panel/ admin/ views/ __init__.py home.py control_panel.

flask蓝图的简单使用

1.flask的简单使用 from flask import Flask # from flask import make_response app = Flask(__name__) app.config.from_object('config') print(app.config['DEBUG']) # 路由注册方法1 @app.route('/hello/') def hello(): # 基于类的视图(即插视图) return "Hello, jack" # Response对

11.5 Flask 蓝图,数据库链接

蓝图 使用场景 如果代码非常多,要进行归类.不同的功能放在不同的文件,把相关的视图函数也放进去. 蓝图也就是对flask的目录结构进行分配(应用于小,中型的程序) 当然对于大型项目也可以通过   url_prefix 加前缀的方式实现 使用方法 # __init__.py from .views.account import ac from .views.user import us app.register_blueprint(ac) app.register_blueprint(us) #