1. 程式人生 > 其它 >2-flask之路由和藍圖

2-flask之路由和藍圖

------------恢復內容開始------------

一:路由

1:查詢路由資訊

1.1 命令列方式

flask routes

1.2 在程式中獲取

在應用中的url_map屬性中儲存著整個Flask應用的路由對映資訊,可以通過讀取這個屬性獲取路由資訊

print(app.url_map)

如果想在程式中遍歷路由資訊,可以採用如下方式

for rule in app.url_map.iter_rules():
    print('name={} path={}'.format(rule.endpoint, rule.rule))

2:指定請求方式

在 Flask 中,定義路由其預設的請求方式為:

  • GET
  • OPTIONS(自帶)
  • HEAD(自帶)

利用methods引數可以自己指定一個介面的請求方式

@app.route("/itcast1", methods=["POST"])
def view_func_1():
    return "hello world 1"

@app.route("/itcast2", methods=["GET", "POST"])
def view_func_2():
    return "hello world 2"

二:藍圖

1:簡介

別多想,藍圖就像桑榆django中的一個app,可以劃分出多個也業務單元進行獨立開發

藍圖實際可以理解為是一個儲存一組檢視方法的容器物件,其具有如下特點:

  • 一個應用(app——flask的例項化物件)可以具有多個Blueprint
  • 可以將一個Blueprint註冊到任何一個未使用的URL下比如 “/user”、“/goods”
  • Blueprint可以單獨具有自己的模板、靜態檔案或者其它的通用操作方法,它並不是必須要實現應用的檢視和函式的
  • 在一個應用初始化時,就應該要註冊需要使用的Blueprint

但是一個Blueprint並不是一個完整的應用,它不能獨立於應用執行,而必須要註冊到某一個應用中。

2:使用方式:三步走

第一步:建立藍圖物件

 user_bp=Blueprint('user',__name__)

第二步:在這個藍圖上進行操作,繫結路由,指定靜態檔案等

 @user_bp.route('/')
 def user_profile():
     return 'user_profile'

第三步:在app上註冊藍圖

 app.register_blueprint(user_bp)

3:單檔案藍圖

可以將藍圖於檢視放到一個檔案中

from flask import Flask,Blueprint

#flask 類接受一個__nmae__ 引數
app = Flask(__name__)

#例項化藍圖
user_blue = Blueprint("user_",__name__)

#對映函式
@user_blue.route("/blue")
def blue():
    return "hello blue"

#裝飾器的作用事將路由對映到函式中
@app.route('/')
def index():
    return "hello word"

# app.register_blueprint(user_blue)
app.register_blueprint(user_blue)

4:目錄(包)藍圖

對於一個打算包含多個檔案的藍圖,通常將建立藍圖物件放到Python包的__init__.py檔案中

--------- project # 工程目錄
  |------ main.py # 啟動檔案
  |------ user  #使用者藍圖
  |  |--- __init__.py  # 此處建立藍圖物件
  |  |--- passport.py  
  |  |--- profile.py
  |  |--- ...
  |
  |------ goods # 商品藍圖
  |  |--- __init__.py
  |  |--- ...
  |...

擴充套件用法

1 指定藍圖的url字首

在應用中註冊藍圖時使用url_prefix引數指定

app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(goods_bp, url_prefix='/goods')

2 藍圖內部靜態檔案

和應用物件不同,藍圖物件建立時不會預設註冊靜態目錄的路由。需要我們在 建立時指定 static_folder 引數。

下面的示例將藍圖所在目錄下的static_admin目錄設定為靜態目錄

admin = Blueprint("admin",__name__,static_folder='static_admin')
app.register_blueprint(admin,url_prefix='/admin')

現在就可以使用/admin/static_admin/<filename>訪問static_admin目錄下的靜態檔案了。

也可通過static_url_path改變訪問路徑

admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
app.register_blueprint(admin,url_prefix='/admin')

3 藍圖內部模板目錄

藍圖物件預設的模板目錄為系統的模版目錄,可以在建立藍圖物件時使用 template_folder 關鍵字引數設定模板目錄

admin = Blueprint('admin',__name__,template_folder='my_templates')

------------恢復內容結束------------