# 前言 在大學和碩士期間主要都是接觸深度學習和電腦視覺的方面的研究,但最近慢慢發現,除了要會這些,許多公司也更重視如何把模型的結果接上後端的API或APP來做使用。但我對製作API或APP是完全沒有概念的,所以這是開始學習製作API和APP的第一天。 這是我的學習紀錄,所有範例都是跟著[Book_Python Flask實作記錄](https://hackmd.io/GVo6X6LoS3GNIW50LBJytw)的教學,並使用我自己的方法整理,以及加上自己的看法。 # 說明 前面學習透過decorator```@app.route()```可以定義路由和傳遞參數,而使用者就能透過此路由拜訪網頁。 但現在有一個問題,如果把路由都寫死,一但路由變更,就必須對所有路由做修正。為了避免這個問題,在flask中可以透過```url_for```解決。 - 可以直接從flask import進來 ```python= from flask import Flask from flask import url_for ``` - 這裡透過兩個function做測試,如下: ```python= @app.route('/a') def url_for_a(): return "Here is a." @app.route('/b') def b(): return url_for('url_for_a') ``` 上面例子先使用```@app.route('/a')```裝飾function```url_for_a()```。而在```@app.route('/b')```中,將```@app.route('/a')```裝飾function```url_for_a()```作為```url_for```的參數,結果如下圖所示。 <br> 下圖為```@app.route('/a')``` ![a](https://hackmd.io/_uploads/rJ9L2cekp.png =70%x) 下圖為```@app.route('/b')``` ![b](https://hackmd.io/_uploads/rklyp5gJp.png =70%x) 可以看到```@app.route('/b')```回傳的結果並不是```@app.route('/a')```的結果,而是```/a```。所以從這個例子可以得知,透過```url_for```可以反過來找被裝飾的function的對應路由。 <br> <br> 為了要讓```@app.route('/b')```能正確顯示內容,在```return```的部分需要透過```redirect```搭配```url_for```。這樣就可以將使用者引導到另一個路由,而不需要整個專案都要調整了。 ```python= from flask import redirect @app.route('/redirect_b') def redirect_b(): return redirect(url_for('url_for_a')) ``` [Source Code Please Visit](https://github.com/ChrisCodeNation/How-to-Make-an-API-with-Flask-Course/blob/main/03_url_for.py)