亚洲成A人片在线观看网站_成年网站免费视频A在线双飞_日日日日做夜夜夜夜无码_久久夜色撩人精品国产小说

Flask 備忘清單

本清單對 Flask 的入門進行了簡要的概述,以及其常用示例。需要有 HTMLPython 基礎。

入門

相關鏈接

  • (developer.mozilla.org)
  • (python.org)
  • (flask.palletsprojects.com)
  • Python 備忘清單 (jaywcjlove.github.io)

Hello World

hello.py

# 導入 Flask 類
from flask import Flask

# 創建應用實例
app = Flask(__name__) # 'Flask' 參數是 應用程序模塊 或 包 的名稱
                      # __name__是適用于大多數情況的便捷快捷方式

# 路由 (裝飾器)
@app.route('/')           # route()裝飾器告訴 Flask 什么路徑觸發下面的功能
def hello():
   # 該函數返回我們想要在瀏覽器中顯示的消息內容
   return 'Hello World!'
   # 默認類型 HTML, 因此字符串中的 HTML 將被瀏覽器渲染
# 啟動服務
if __name__ == '__main__':
   app.run()

運行 hello.py 程序

$ python hello.py
 * Serving Flask app 'hello'
 * Running on //127.0.0.1:5000
 * Press CTRL+C to quit

$ flask --app hello run
 * Serving Flask app 'hello'
 * Running on //127.0.0.1:5000
 * Press CTRL+C to quit
$ flask run --host=0.0.0.0

啟用調試模式,使用 --debug 選項

$ flask --app hello --debug run

HTML 轉義

from markupsafe import escape

@app.route("/<name>")
def hello(name):
    return f"Hello, {escape(name)}!"

路由

@app.route('/')
def index():
    return 'Index Page'

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

變量規則

from markupsafe import escape

@app.route('/user/<username>')
def show_user_profile(username):
    # 顯示該用戶的用戶個人資料
    return f'User {escape(username)}'

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # 顯示給定id的帖子,id是一個整數
    return f'Post {post_id}'

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    # 在 /path/ 之后顯示子路徑
    return f'Subpath {escape(subpath)}'

轉換器類型:

:----
string(默認)接受任何沒有斜杠的文本
int接受正整數
float接受正浮點值
path像字符串但也接受斜線
uuid接受 UUID 字符串

唯一 URL / 重定向行為

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

項目端點的規范 URL 有一個尾部斜杠。它類似于文件系統中的文件夾。如果您訪問沒有尾部斜杠 (/projects) 的 URLFlask 會將您重定向到帶有尾部斜杠 (/projects/) 的規范 URL

URL 建設

from flask import url_for

@app.route('/')
def index():
    return 'index'

@app.route('/login')
def login():
    return 'login'

@app.route('/user/<username>')
def profile(username):
    return f'{username}\'s profile'

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))
    print(url_for('login', next='/'))
    print(url_for('profile', username='John Doe'))

HTTP 方法

默認路由僅響應 GET 請求。可以使用 route() 裝飾器的方法參數來處理不同的 HTTP 方法

from flask import request

@app.route('/login',methods=['GET','POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

您還可以將不同方法的視圖分成不同的函數。 Flask 為每個常見的 HTTP 方法提供了一種快捷方式,用于使用 get()post() 等來裝飾此類路由

@app.get('/login')
def login_get():
    return show_the_login_form()

@app.post('/login')
def login_post():
    return do_the_login()

Blueprint

創建藍圖Bp1

from flask import Blueprint, abort, jsonify

# 定義Bp1,并定義url前綴為/img
Bp1 = Blueprint('imgBlue', __name__, template_folder='templates', url_prefix='/img')


@Bp1.route('/getimg')
def getImg():
    try:
        return jsonify(name="img", size="100KB")
    except Exception as e:
        abort(e)

創建藍圖Bp2

from flask import Blueprint, abort, jsonify

# 定義Bp2,并定義url前綴為/vedio
Bp2 = Blueprint('vedioBlue', __name__, template_folder='templates', url_prefix='/vedio')


@Bp2.route('/getvedio')
def getVedio():
    try:
        return jsonify(name="vedio", size="100GB")
    except Exception as e:
        abort(e)

在flask app中引用藍圖Bp1和Bp2

from flask import Flask, jsonify
from lantu.img import Bp1
from lantu.vedio import Bp2

app = Flask(__name__)

# 注冊藍圖到app
app.register_blueprint(Bp1)
app.register_blueprint(Bp2)


@app.route('/')
def index():
    return jsonify(name='phyger')


if __name__ == '__main__':
    app.run(host="127.0.0.1", debug=True)

簡單測試

curl //127.0.0.1:5000/
>> {"name":"phyger"}

curl //127.0.0.1:5000/img/getimg
>> {"name": "img", "size": "100KB"}

curl //127.0.0.1:5000/vedio/getvedio
>> {"name": "vedio", "size": "100GB"}