基本路線
可以使用 Flask 應用程式例項的 route
裝飾器定義 Flask 中的路徑:
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello Flask'
route
裝飾器接受一個匹配的 URL 字串。當應用程式收到對與此字串匹配的 URL 的請求時,將呼叫已修飾的函式(也稱為檢視函式 )。所以對於一條約路線,我們會:
@app.route('/about')
def about():
return 'About page'
重要的是要注意這些路由不是像 Django 那樣的正規表示式。
你還可以定義變數規則以將 URL 段值提取到變數中:
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id):
# look up the blog post with id post_id
# return some kind of HTML
這裡變數規則位於 URL 的最後一段。無論 URL 的最後一段中的值是什麼,都將作為 post_id
引數傳遞給檢視函式(get_blog_post
)。因此,對/blog/posts/42
的請求將檢索(或嘗試檢索)id 為 42 的部落格帖子。
重用 URL 也很常見。例如,我們可能希望/blog/posts
返回所有部落格帖子的列表。所以我們可以有兩個相同檢視函式的路由:
@app.route('/blog/posts')
@app.route('/blog/posts/<post_id>')
def get_blog_post(post_id=None):
# get the post or list of posts
請注意,我們還必須為 get_blog_post
中的 post_id
提供 None
的預設值。匹配第一個路徑時,沒有值傳遞給檢視功能。
另請注意,預設情況下,變數規則的型別是字串。但是,你可以通過為變數新增字首來指定幾種不同的型別,例如 int
和 float
:
@app.route('/blog/post/<int:post_id>')
Flask 的內建 URL 轉換器是:
string | Accepts any text without a slash (the default).
int | Accepts integers.
float | Like int but for floating point values.
path | Like string but accepts slashes.
any | Matches one of the items provided
uuid | Accepts UUID strings
如果我們嘗試訪問 URL /blog/post/foo
,並且最後一個 URL 段中的值無法轉換為整數,則應用程式將返回 404 錯誤。這是正確的操作,因為沒有/blog/post
規則和最後一個段中的字串。
最後,路由也可以配置為接受 HTTP 方法。route
裝飾器採用 methods
關鍵字引數,該引數是表示此路由的可接受 HTTP 方法的字串列表。正如你可能假設的那樣,預設值僅為 GET
。如果我們有一個表單來新增新的部落格帖子並想要返回 GET
請求的 HTML 並解析 POST
請求的表單資料,那麼該路由將如下所示:
@app.route('/blog/new', methods=['GET', 'POST'])
def new_post():
if request.method == 'GET':
# return the form
elif request.method == 'POST':
# get the data from the form values
request
位於 flask
包中。請注意,在使用 methods
關鍵字引數時,我們必須明確要接受的 HTTP 方法。如果我們只列出了 POST
,那麼該路由將不再響應 GET
請求並返回 405 錯誤。