一,结构
首先看目录结构:
总体结构:
1,首先新建flask项目
2,在项目一级目录中新建“apps”包,注意是包。新建他是为了简历蓝图。
3,apps下分为cms后台管理,front前台页面以及common公共页面。
4,config是设置文件
5,exts避免双向引用简历的中间件,可参加我之前的博客。
蓝图结构,以cms为例:
每个蓝图中将表单、数据模型、视图分开来(即:forms,models,views),在views中新建蓝图:
1 from flask import Blueprint 2 3 # 在‘bp = Blueprint('cms',__name__,url_prefix='cms')’中出错了,原因在于前缀没加‘/’ 4 bp = Blueprint('cms',__name__,url_prefix='/cms') 5 6 @bp.route('/') 7 def index(): 8 return 'cms index'
Note:第4行要加上“/”。为啥后面不加呢?因为后面要是加的话就会形成:“http://127.0.0.1:5000/cms//index”,当然我这里没写index,但是后面加了会使得URL中也毕业加两条//才能访问,不加是为了防止重复。
在cms下的init文件中有:
from .views import bp
这句话实际上是把同级文件views中的bp提到cms这一级别,方便其他文件对他import。
比如主文件puppetbbs中本来应该是“from apps.cms.views import bp as cms_bp”,但是我们在cms/front/common中init中加入了“from .views import bp”,使得从“apps.cms”就能导入bp。且我们用as给他取个别名。才有下面这种简单的调用:
from apps.cms import bp as cms_bp
最后,在主文件中记得注册蓝图。这里有一点需要注意:
先看源码,blueprint这里没说接受字符串,因此不要用把cms_bp打引号,应该为下面代码:
app.register_blueprint(cms_bp) #Note:cms_bp不需要打引号