基于调度方法的视图
class xxxx(views.MethodView):
def get(self):
pass
def post(self):
pass
Flask蓝图和子域名的实现
之前我们写url和视图函数都是处在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这种需求。
Flask蓝图的基本使用
在flask主文件同级目录下创建一个蓝图文件
创建蓝图py文件
从flask中导入Blueprint
创建蓝图实例
映射路由和函数
在主文件中导入蓝图
在app下注册蓝图
1.from flask import Blueprint
2.bp = Blueprint('user',__name__,url_prefix='/user/')
3.@bp.route('/')
4.def index():
5. return "用户首页"
6.@bp.route('profile/')
7.def profile():
8. return "个人简介"
然后在主程序中,通过app.register_blueprint()方法将这个蓝图注册进url映射中,看下主app的实现
1.from flask import Flask
2.import user
3.app = Flask(__name__)
4.app.register_blueprint(user.bp)
5.if __name__ == '__main__':
6. app.run(host='0.0.0.0',port=9000)
Flask蓝图调用模板文件
模板文件默认是在主文件同级目录下的templates
直接在蓝图中渲染模板文件
如果需要修改目录,可以在创建实例的时候制定template_folder=‘xxxx’, 如果制定了模板目录,在默认的templates下面没有这个模板文件,它才会去到制定的模板目录下寻找
Flask蓝图调用静态文件
模板文件默认是在主文件同级目录下的static
1.bp = Blueprint('admin',__name__,url_prefix='/admin',static_folder='static')
如果需要制定文件目录,使用static_folder=‘xxx’, 加载文件的过程同样也是现在默认的文件目录下加载,然后再去蓝图目录下的文件加载
1.<link href="{{ url_for('admin.static',filename='about.css') }}">
url_for: 蓝图名称.视图名称
1.url_for('admin.index')
其中这个蓝图名称是在蓝图创建时,传入的第一个参数。
1.bp = Blueprint('admin',__name__,url_prefix='/admin',template_folder='templates')
Flask构建子域名
创建一个xxx的蓝图文件
创建蓝图实例的时候,再后面加上subdomain=‘xxx’
然后导入加注册蓝图
修改电脑本机配置 c盘--windows--system32---drives--etc---hosts
修改服务名称配置:app.config['SERVER_NAME'] = 'xxxxx.com'
举例app.config[SERVER_NAME]='example.com:9000'。并且在注册蓝图时,还需添加一个subdomain的参数,这个参数就是子域名的名称
1.from flask import Blueprint
2.bp = Blueprint('admin',__name__,subdomain='admin')
3.@bp.route('/')
4.def admin():
5. return 'Admin Page'
这个没多大区别,接下来看主app的实现
1.from flask import Flask
2.import admin
3.# 配置`SERVER_NAME`
4.app.config['SERVER_NAME'] = 'example.com:8000'
5.# 注册蓝图,指定了subdomain
6.app.register_blueprint(admin.bp)
7.if __name__ == '__main__':
8. app.run(host='0.0.0.0',port=8000,debug=True)
以上二个文件还是不能正常访问admin.example.com:8000这个子域名,因为没有在host文件中添加域名解析,可以在最后添加一行127.0.0.1 admin.example.com,就可访问到了。另外,子域名不能在127.0.0.1上出现,也不能在localhost 上出现。