Python — Flask , a lightweight REST Service

JLin
7 min readAug 27, 2018

--

如果要在ubuntu環境下安裝一個簡單的service,並且具有REST架構,而且要能執行C code,要怎麼辦呢?

詳細的REST說明可以看這邊:

https://blog.taiker.space/python-shi-yong-python-he-flask-she-ji-restful-api/

先研究原來Python是可以呼叫C語言的,所以可以使用Python,另外搜尋rest 跟 python,就找到了 Flask

首先要安裝Python 3,而安裝Flask之前要安裝pip

sudo apt-get python3-pip

安裝好後可以進行

pip install Flask

安裝好後可以按照官方步驟

  1. 產生一個Hello檔案
vim hello.py

內容為

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

2. 開始Setup,將要執行的執行檔設定給FLASK_APP,實際指令是這樣

export FLASK_APP=hello.py
flask run

會看到以下結果

 * Running on http://localhost:5000/

透過curl就可以進行測試

curl http://127.0.0.1:5000/

這邊可以參考Quickstart

如何複雜一點呢?

複雜一點可以變成json 或者 url參數

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World'
@app.route('/json')
def json():
return '{\'data\' : \'data123\' }'
@app.route('/user/<username>')
def show_user_name(username):
return 'User %s' % username

設定POST或者GET方法

from flask import Flask
app = Flask(__name__)
@app.route('/setRouting', methods=['POST'])
def set_routing():
print 'request.headers'
return 'welcome\n'
@app.route('/getRouting',methods=['POST','GET'])
def get_routing():
print 'hi'
return 'post-get\n'

可以使用curl測試

curl -d ‘param1=value1’ -X POST http://127.0.0.1:5000/setRouting

指定port 或者host

flask run --port 8000 --host 192.168.1.11

讀取Request的方式

@app.route(‘/api/auth’, methods=[‘POST’])
def auth():
assert request.method == ‘POST’
assert request.path == ‘/auth’
return 'Done'

Curl:

curl -X POST http://127.0.0.1:5000/api/auth

如何讀取Request的JSON資料

假設傳了

{ “userName” : “tester” , “password”: “pw”}

如何在Request接收呢?

注意上方的from import要加上request引用

from flask import Flask,request
@app.route(‘/api/auth’, methods=[‘POST’])
def auth():
json_data = request.get_json(force=True)
return json_data[‘userName’]

使用Curl測試,注意curl不可以使用 ‘單引號,需要使用雙引號,否則flask會覺得不合法

curl -H “Content-Type: application/json” 
-d “{\”password\”:\”HelloWorlorld\n\”}”
-X POST http://127.0.0.1:5000/auth

如何開啟DebugMode

先進行環境變數設定,就可以在發生錯誤的時候將錯誤資訊傳至html中

export FLASK_ENV=development

譬如

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2 Final//EN”>
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Failed to decode JSON object: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)</p>

更多可以使用的Request欄位可以參考這邊

呼叫c code

TODO ...

補充VIM指令

vim {filename}

在編輯模式中可以任意使用,如果要儲存使用

esc
:wq

如果在下次開啟後,要進行編輯,移動到要編輯的地方,按下即可開始編輯

i

如果遇到上次主機掛掉,他會出現說有一個swap file,問你要不要繼續,你可以按下Delete不使用,就不會在之後繼續問你使用swap file.

參考

以下blog相當完整值得參考

http://wiki.jikexueyuan.com/project/flask-guide/quick-start.html

--

--

JLin

JAVA / Android /Kotlin / Kotlin Native 對於Kotlin衍生的JVM等技術 Compose for web / desktop / Ktor Server,或是生成式AI (Gemini/OpenAI)各式應用, 都有小興趣