【flask】Blueprint蓝图

目录

一、蓝图的作用

二、蓝图的基本使用:

三、注意事项


一、蓝图的作用

  • 分层隔离(解耦):避免与项目同名的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

发布了46 篇原创文章 · 获赞 75 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38875300/article/details/98040998