目录
一、蓝图的作用
- 分层隔离(解耦):避免与项目同名的py文件里面有过多的指定不同内容的app.rout()会堆叠在同此文件。假设是文件处理系统里面,有用户详情页和书本详情页都堆放与项目同名的py文件里面,加上一些实现的函数,不便于管理,。
- 更加模块化:把某一模块的内容放到指定的蓝图可以更加清晰明了。例如,用了蓝图以后users会在一个蓝图中,book会在另外一个蓝图中。
以下内容可以跳过:
这是我的目录文件:
dio是反派和jojo在一起很容易会打架。
# =====sample.py======
from flask import Flask
app = Flask(__name__)
def ora():
print("ora ora ora")
def muda():
print("muda muda muda")
def surprise():
print("oh my god")
@app.route('/Dio/')
def dio():
return 'The World!'
@app.route('/Kujo Jotaro/')
def Jotaro():
ora()
return 'Star Platinum'
@app.route('/Joseph Joestar/')
def Joestar():
surprise()
return 'Hermit Purple'
if __name__ == '__main__':
app.run()
利用蓝图将两者分开
二、蓝图的基本使用:
下面是文件目录:
- 在protagonist里面新建一个views.py文件
- 在flask里面导入Blueprint。
- 新建Bluep对象protagonist_bp。
- 把sample.py里面除了dio以外的角色以及角色的方法复制到protagonist的views.py文件里面,把app对象换成protagonist_bp对象。villain.py同理。
# =====protagonist/views.py======
from flask import Blueprint
protagonist_bp = Blueprint('protagonist', __name__, url_prefix='/protagonist')
def surprise():
print("oh my god")
def ora():
print("ora ora ora")
@protagonist_bp.route('/Kujo Jotaro/')
def Jotaro():
ora()
return 'Star Platinum'
@protagonist_bp.route('/Joseph Joestar/')
def Joestar():
surprise()
return 'Hermit Purple'
# =====villain/views.py=====
from flask import Blueprint
villain_bp = Blueprint("villain", __name__, url_prefix='/villain')
def muda():
print("muda muda muda")
@villain_bp.route('/Dio/')
def dio():
return 'The World!'
最后导入刚刚写的蓝图,并且在sample.py注册蓝图。
# ====sample.py====
from flask import Flask
from characters.protagonist.views import protagonist_bp
from characters.villain.views import villain_bp
app = Flask(__name__)
app.register_blueprint(protagonist_bp)
app.register_blueprint(villain_bp)
if __name__ == '__main__':
app.run()
最后访问url:【localhost】:【port】/protagonist/Kujo Jotaro/ 看见了%20就可以知道空格被转译了,所以我把所有url的空格删掉了。
三、注意事项
1、url定义时不要加空格。
2、浏览器会自动在url的结尾加上斜杠。
3、如果在定义blueprint的时候开头一定要加上“/”,结尾如果定义了时加了“/”,则在此蓝图下定义的网址全部的开头都不用加“/”。如下图情况一和情况二。但是加了也不会影响,最后一种情况,感觉上的url是“http://127.0.0.1:5000/villain//Dio/”Dio前有两个斜杠,其实其中一个斜杠会被忽略,访问“http://127.0.0.1:5000/villain/Dio/”是可以成功访问的。
4、如果你用的是域名,想添加的是子域名则用subdomain这个参数,同时,不可以localhost即127.0.0.1