1. 程式人生 > 其它 >Flask請求,響應

Flask請求,響應

一、補充

1、路由

我們可以通過 url_map 來檢視 所有的 路由對映。

/static 是對映到了 static目錄下,可以在static目錄中存放靜態資源(圖片、css、js)

2、命令啟動服務

我們可以試驗flask run 命令 來啟動服務,這樣子 預設 會在當前目錄下找app.py檔案,預設是 Environmen環境設定為 production

二、請求帶參

1、路徑中帶參

標準格式

/path/<引數>

預設 引數 格式是字串

但是我們還有其他的格式,可以做資料格式轉換

flask提供了常見資料格式的轉換

string、int、float、path、uuid

/path/<string:引數>   預設string可不寫

/path/<int:引數> 會把引數 轉成 整數 如果引數不是整數 會報錯返回 404

/path/<float:引數>
  • 自定義 轉換器

1、建立一個自定義轉換器
自定義Converter類
class PhoneConverter(BaseConverter):
# 重寫 正則規則 檢視引數是否匹配該正則
regex = r'1[3-9]\d{9}'


2、註冊至converters容器 phone 轉換器別名
app.url_map.converters['phone'] = PhoneConverter

3、使用自定義轉換器
@app.route('/user/<phone:user_id>')
def user_info(user_id):
return "手機號登入:{}".format(user_id)

三、處理請求

flask提供了檢視函式,可以在檢視函式中 處理請求

1、獲取url後?引數

request.args.get("引數","預設值")

title = request.args.get("title", "沒有")

2、form表單傳參

title = request.form.get("title")
price = request.form.get("price")

3、 json格式傳參

title = request.json.get("title")
price = request.json.get("price")

4、檔案上傳

file1 = request.files.get("file1")

可以獲取檔名

file1.filename

儲存檔案

file1.save()

四、響應

1、返回字串

預設就可以直接返回字串,其實返回的還是網頁,只不過內容是純文字

return "返回圖書集合"

2、返回模板網頁

from flask import render_template

@app.route("/", methods=["GET", "POST"])
def hello_world():
return render_template("home.html")
  • 擴充套件一點 Jinjia2 模板引擎

Jinjia2模板 和我們django 內建模板語法 基本一致, 我們簡單瞭解

我們在 檢視中 定義好 變數資料@app.route("/", methods=["GET", "POST"])

def hello_world():
new_list = ["新聞1", "新聞2", "新聞3", "新聞4"]

return render_template("home.html", news={"news_list": new_list, "title": "我是新標題"})

在 模板中使用 定義好的變數資料

{{變數名}} 會展示變數的值

{% for 語句 %} 迴圈體 {% endfor %}

<body>
<h1>{{ news.title }}</h1>
<h1>《功勳-李延年》</h1>

{% for item in news.news_list %}
<p>{{ item }}</p>
{% endfor %}
</body>

3、返回重定向地址

有的時候,資源不在當前 路徑對應的檢視中,而是在另外一個地方,我們就需要重定向,告訴瀏覽器你在訪問 這個地方。

瀏覽器 其實訪問了兩遍


@app.route("/books", methods=["GET"])
def go_book():
return redirect("/book")
  • url_for函式

我們在程式碼中 儘量避免 直接寫路徑,如果寫的多了,想修改某路徑的時候,那就需要修改很多地方。

我們使用endpoint 引數 給 路由 起別名, 使用別名代表 該使用者

@app.route("/book", endpoint="book")
def book_list():
title = request.args.get("title", "沒有")

return "返回圖書集合"

url_for 傳入別名 找到對應的路由

@app.route("/books", methods=["GET"])
def go_book():
return redirect(url_for("book"))

4、返回json格式資料

我們要返回json格式資料,可以藉助於 提供的函式 jsonify

from flask import jsonify

jsonify 會返回一個 Content-Type是 application/json 格式的 響應物件

5、返回元組響應

我們可以 同時she則 返回內容、響應碼、響應頭等資訊

(響應內容,響應碼,響應頭)

@app.route("/book/add", methods=["POST"])
def book_add():

return ("新增圖書成功", 500, {"Content-Type": "application/json"})

6、make_reponse 返回

我們也可以自定義返回的內容,使用make_reponse 方法。

@app.route("/book/<int:id>/")
def book_one(id):
print(type(id))

resp = make_response("我要昇天")
resp.headers["Content-Type"] = "text/html"
resp.status_code = 500
resp.status = "500 error"