[Flask] 從基本的路由設定開始

講到 Python 上很紅的 web library: Flask,就一定得先提它的 route 設定。

首先,示範最基本的 Hello World 是什麼:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

app.run(debug=True, host='0.0.0.0', port=5566, processes=10)

直接執行上面的程式碼,之後打開瀏覽器進入 http://localhost:5566/ 就可以看到 Hello World! 這一行字。那如果要在 url 上帶參數,要如何設定呢?請參考下列程式碼:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/name/<name>')
def show_user(name):
    return 'Hi! {0}'.format(name)

app.run(debug=True, host='0.0.0.0', port=5566, processes=10)

當然,參數除了字串,是可以轉換成其它型別的,像是:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/name/<name>')
def show_user(name):
    return 'Hi! {0}'.format(name)

@app.route('/id/<int:id>')
def show_post(id):
    return 'Your id is {0}'.format(id)

app.run(debug=True, host='0.0.0.0', port=5566, processes=10)

而除了一般的 http GET,也一定會用到 http 的 POST,這時在 route 的呼叫上多加一個 methods 參數就可以了:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/Index", methods=['GET', 'POST'])
def index_method():
    json_content = request.get_json()
    if request.method == 'POST':
        return 'you use HTTP POST'
    else:
        return 'you use HTTP GET'

app.run(debug=True, host='0.0.0.0', port=5566, processes=10)

在前述的程式碼,json_content 是透過 request.get_json 將 post 過來的資料直接轉換為 json 物件,算是很常用到的做法。

另外,在範例程式碼中,都把 route 的設定及 app 的執行寫在同一支程式碼裡,但實務上會把 route 的設定獨立在 controllers 的資料夾裡。例如將所有的 route 設定移至 controllers 底下的 home_controller.py 裡,那 home_controller.py 得改為下列的形式:

from controllers import app
from flask import Flask

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/name/<name>')
def show_user(name):
    return 'Hi! {0}'.format(name)

@app.route('/id/<int:id>')
def show_post(id):
    return 'Your id is {0}'.format(id)

差別在於 多了一行 from controllers import app。而在 controllers 資料夾底下還需多加一個 __init__.py 檔案,內容如下:

from flask import Flask

app = Flask(__name__)

import home_controller

最後 run.py 改為:

from controllers import app

app.run(debug=True, host='0.0.0.0', port=5566, processes=10)

在前面的內容裡,只提到 route 上常見的用法,至於如何回傳一個完整的網頁(也就是所謂的 view),在之後的文章會加以說明。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s