æ¬æ¸
å对 Flask çå
¥é¨è¿è¡äºç®è¦çæ¦è¿°ï¼ä»¥åå
¶å¸¸ç¨ç¤ºä¾ãéè¦æ HTML å Python åºç¡ã
# 导å
¥ 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 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
å¯ç¨è°è¯æ¨¡å¼ï¼ä½¿ç¨ --debug é项
$ 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):
# æ¾ç¤ºè¯¥ç¨æ·çç¨æ·ä¸ªäººèµæ
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 å符串 |
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
项ç®ç«¯ç¹çè§è URL æä¸ä¸ªå°¾é¨ææ ãå®ç±»ä¼¼äºæä»¶ç³»ç»ä¸çæä»¶å¤¹ã妿æ¨è®¿é®æ²¡æå°¾é¨ææ (/projects) ç URLï¼Flask ä¼å°æ¨éå®åå°å¸¦æå°¾é¨ææ (/projects/) çè§è 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'))
é»è®¤è·¯ç±ä»
ååº 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()
å建èå¾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åç¼ä¸º/video
Bp2 = Blueprint('videoBlue', __name__, template_folder='templates', url_prefix='/video')
@Bp2.route('/getvideo')
def getvideo():
try:
return jsonify(name="video", size="100GB")
except Exception as e:
abort(e)
å¨flask appä¸å¼ç¨èå¾Bp1åBp2
from flask import Flask, jsonify
from lantu.img import Bp1
from lantu.video 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 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/video/getvideo
>> {"name": "video", "size": "100GB"}