【flask】python上啓動web服務

如下實驗基於Ubuntu==18.0四、anaconda==2019.0七、python==3.六、flask==1.1.1python


啓動web服務

導入flask中的Flask模塊後使用Flask初始化web服務對象app = Flask(__name__)git

這個app就是web服務的對象,接下來只要調用app.run()方法就能夠啓動web服務器了,就是這麼簡單github

啓動log以下web

/home/yukiti2007/anaconda3/envs/tf2/bin/python /home/yukiti2007/IdeaProjects/sample/python/flask/router.py
 * Serving Flask app "router" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

能夠看出flask默認是在5000端口啓動web服務的flask

從log中的警告能夠看出,這種啓動方式只是在開發階段使用,不推薦在生產環境中使用服務器

若是是生產環境,建議使用WSGI server啓動服務app


app.run()方法有5個參數函數

參數名 意義 默認值
host 監聽的主機ip地址 127.0.0.1(localhost)
port web服務啓動端口 5000
debug 是否以debug模式啓動 None
load_dotenv 是否加載環境變量,默認會加載以.env.flaskenv結尾的文件 True
options 其餘選項(由於flask底層是經過Werkzeug實現的,因此這些選項會傳遞給Werkzeug,詳細信息須要查看werkzeug.serving.run_simple方法) -

若是不想使用5000端口啓動服務,只須要加上參數prot=8080就能夠以8080端口啓動服務了ui

另外,因爲默認的監聽ip地址是127.0.0.1,因此啓動的服務只能本機訪問url

若是須要在其餘機器上也能訪問,須要將監聽端口設爲0.0.0.0

下面以如下參數啓動服務app.run(host="0.0.0.0",port=8080,debug=True),啓動log以下

/home/yukiti2007/anaconda3/envs/tf2/bin/python /home/yukiti2007/IdeaProjects/sample/python/flask/router.py
 * Serving Flask app "router" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 249-050-533

添加路由

flask添加路由有2種方式

  1. 使用裝飾器route()
  2. 使用函數add_url_rule()

下面咱們使用兩種方式添加兩個路由試試

# 在方法上添加裝飾器
@app.route("/hello1")
def hello_world1():
    return "hello_world1"

# 使用函數添加
def hello_world2():
    return "hello world2"
app.add_url_rule("/hello2", view_func=hello_world2)

訪問成功,同時也自動打印了訪問log

192.168.140.1 - - [08/Aug/2019 16:23:30] "GET /hello2 HTTP/1.1" 200 -
192.168.140.1 - - [08/Aug/2019 16:23:39] "GET /hello1 HTTP/1.1" 200 -


可是這樣添加的路由只支持GET方式的請求,經過POST方式訪問的話會拒絕響應

192.168.140.1 - - [08/Aug/2019 16:33:26] "POST /hello1 HTTP/1.1" 405 -
192.168.140.1 - - [08/Aug/2019 16:33:44] "POST /hello2 HTTP/1.1" 405 -

能夠經過添加method的方式來制定響應請求的Method

# 裝飾器方式
@app.route("/hello1", methods=["GET", "POST"])

# 使用函數方式
app.add_url_rule("/hello2", view_func=hello_world2, methods=["GET", "POST"])

重啓服務之後再次以POST方式嘗試訪問,響應成功

192.168.140.1 - - [08/Aug/2019 16:40:29] "POST /hello1 HTTP/1.1" 200 -
192.168.140.1 - - [08/Aug/2019 16:40:50] "POST /hello2 HTTP/1.1" 200 -

完整代碼已經上傳到github

相關文章
相關標籤/搜索