本清單對(duì) Flask 的入門進(jìn)行了簡(jiǎn)要的概述,以及其常用示例。需要有 HTML 和 Python 基礎(chǔ)。
# 導(dǎo)入 Flask 類
from flask import Flask
# 創(chuàng)建應(yīng)用實(shí)例
app = Flask(__name__) # 'Flask' 參數(shù)是 應(yīng)用程序模塊 或 包 的名稱
# __name__是適用于大多數(shù)情況的便捷快捷方式
# 路由 (裝飾器)
@app.route('/') # route()裝飾器告訴 Flask 什么路徑觸發(fā)下面的功能
def hello():
# 該函數(shù)返回我們想要在瀏覽器中顯示的消息內(nèi)容
return 'Hello World!'
# 默認(rèn)類型 HTML, 因此字符串中的 HTML 將被瀏覽器渲染
# 啟動(dòng)服務(wù)
if __name__ == '__main__':
app.run()
hello.py 程序$ python hello.py
* Serving Flask app 'hello'
* Running on http://127.0.0.1:5000
* Press CTRL+C to quit
$ flask --app hello run
* Serving Flask app 'hello'
* Running on http://127.0.0.1:5000
* Press CTRL+C to quit
$ flask run --host=0.0.0.0
啟用調(diào)試模式,使用 --debug 選項(xiàng)
$ flask --app hello --debug run
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):
# 顯示該用戶的用戶個(gè)人資料
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
# 顯示給定id的帖子,id是一個(gè)整數(shù)
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# 在 /path/ 之后顯示子路徑
return f'Subpath {escape(subpath)}'
轉(zhuǎn)換器類型:
| :-- | -- |
|---|---|
string | (默認(rèn))接受任何沒(méi)有斜杠的文本 |
int | 接受正整數(shù) |
float | 接受正浮點(diǎn)值 |
path | 像字符串但也接受斜線 |
uuid | 接受 UUID 字符串 |
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
項(xiàng)目端點(diǎn)的規(guī)范 URL 有一個(gè)尾部斜杠。它類似于文件系統(tǒng)中的文件夾。如果您訪問(wèn)沒(méi)有尾部斜杠 (/projects) 的 URL,Flask 會(huì)將您重定向到帶有尾部斜杠 (/projects/) 的規(guī)范 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'))
默認(rèn)路由僅響應(yīng) GET 請(qǐng)求??梢允褂?route() 裝飾器的方法參數(shù)來(lái)處理不同的 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()
您還可以將不同方法的視圖分成不同的函數(shù)。 Flask 為每個(gè)常見(jiàn)的 HTTP 方法提供了一種快捷方式,用于使用 get()、post() 等來(lái)裝飾此類路由
@app.get('/login')
def login_get():
return show_the_login_form()
@app.post('/login')
def login_post():
return do_the_login()
創(chuàng)建藍(lán)圖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)
創(chuàng)建藍(lán)圖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中引用藍(lán)圖Bp1和Bp2
from flask import Flask, jsonify
from lantu.img import Bp1
from lantu.vedio import Bp2
app = Flask(__name__)
# 注冊(cè)藍(lán)圖到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)
簡(jiǎn)單測(cè)試
curl http://127.0.0.1:5000/
>> {"name":"phyger"}
curl http://127.0.0.1:5000/img/getimg
>> {"name": "img", "size": "100KB"}
curl http://127.0.0.1:5000/vedio/getvedio
>> {"name": "vedio", "size": "100GB"}
感谢您访问我们的网站,您可能还对以下资源感兴趣:
国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片