Python Flask妗嗘灦璇﹁В,,鏍囩锛?a hre


鏍囩锛?a href='http://www.byrx.net/so/1/%e6%96%87%e4%bb%b6%e5%8a%a0%e8%bd%bd' title='鏂囦欢鍔犺浇'>鏂囦欢鍔犺浇

銆€銆€Flask 鏈韩鐩稿綋浜庝竴涓唴鏍革紝鍏朵粬鍑犱箮鎵€鏈夌殑鍔熻兘閮借鐢ㄥ埌鎵╁睍锛岄兘闇€瑕佺敤绗笁鏂圭殑鎵╁睍鏉ュ疄鐜帮紝姣斿鍙互鐢?Flask 鎵╁睍鍔犲叆ORM銆佺獥浣撻獙璇佸伐鍏凤紝鏂囦欢涓婁紶銆佽韩浠介獙璇佺瓑銆侳lask 娌℃湁榛樿浣跨敤鐨勬暟鎹簱锛屼綘鍙互閫夋嫨 MySQL锛屼篃鍙互鐢?NoSQL銆?/p>

銆€銆€鍏?WSGI 宸ュ叿绠遍噰鐢?Werkzeug锛堣矾鐢辨ā鍧楋級锛屾ā鏉垮紩鎿庡垯浣跨敤 Jinja2銆傝繖涓や釜涔熸槸 Flask 妗嗘灦鐨勬牳蹇冦€?/p>

Flask甯哥敤鎵╁睍鍖咃細

Flask-SQLalchemy锛氭搷浣滄暟鎹簱锛?/li>Flask-script锛氭彃鍏ヨ剼鏈紱Flask-migrate锛氱鐞嗚縼绉绘暟鎹簱锛?/li>Flask-Session锛歋ession瀛樺偍鏂瑰紡鎸囧畾锛?/li>Flask-WTF锛氳〃鍗曪紱Flask-Mail锛氶偖浠讹紱Flask-Bable锛氭彁渚涘浗闄呭寲鍜屾湰鍦板寲鏀寔锛岀炕璇戯紱Flask-Login锛氳璇佺敤鎴风姸鎬侊紱Flask-OpenID锛氳璇侊紱Flask-RESTful锛氬紑鍙慠EST API鐨勫伐鍏凤紱Flask-Bootstrap锛氶泦鎴愬墠绔疶witter Bootstrap妗嗘灦锛?/li>Flask-Moment锛氭湰鍦板寲鏃ユ湡鍜屾椂闂达紱Flask-Admin锛氱畝鍗曡€屽彲鎵╁睍鐨勭鐞嗘帴鍙g殑妗嗘灦涓枃鏂囨。锛?a href="http://docs.jinkan.org/docs/flask/" target="_blank">http://docs.jinkan.org/docs/flask/锛?/li>鑻辨枃鏂囨。锛?a href="http://flask.pocoo.org/docs/0.11/" target="_blank">http://flask.pocoo.org/docs/0.11/锛?/li>鎵╁睍鍒楄〃锛?a href="http://flask.pocoo.org/extensions/" target="_blank">http://flask.pocoo.org/extensions/
#瀹夎pip install flask==0.10.1      # 鍚庨潰涓虹増鏈彿

1銆佹柊寤烘枃浠秇elloworld.py

# 瀵煎叆Flask绫?/span>from flask import Flask# Flask鍑芥暟鎺ユ敹涓€涓弬鏁癬_name__锛屽畠浼氭寚鍚戠▼搴忔墍鍦ㄧ殑鍖?/span>app = Flask(__name__)# 瑁呴グ鍣ㄧ殑浣滅敤鏄皢璺敱鏄犲皠鍒拌鍥惧嚱鏁?index@app.route(鈥?/span>/鈥?/span>)def index():    return 鈥?/span>Hello World鈥?/span># Flask搴旂敤绋嬪簭瀹炰緥鐨?run 鏂规硶 鍚姩 WEB 鏈嶅姟鍣?/span>if __name__ == 鈥?/span>__main__鈥?/span>:    app.run()    # 鍙互鎸囧畾杩愯鐨勪富鏈篒P鍦板潃锛岀鍙o紝鏄惁寮€鍚皟璇曟ā寮?/span>    # app.run(host="0.0.0.0", port=8888, debug = True)

2銆佺浉鍏抽厤缃弬鏁?/h2>

Flask 绋嬪簭瀹炰緥鍦ㄥ垱寤虹殑鏃跺€欙紝闇€瑕侀粯璁や紶鍏ュ綋鍓?Flask 绋嬪簭鎵€鎸囧畾鐨勫寘(妯″潡)

app = Flask(__name__)

鎶€鏈浘鐗? src=

import_nameFlask绋嬪簭鎵€鍦ㄧ殑鍖?妯″潡)锛屼紶__name__灏卞彲浠?/li>鍏跺彲浠ュ喅瀹?Flask 鍦ㄨ闂潤鎬佹枃浠舵椂鏌ユ壘鐨勮矾寰?/li>static_path闈欐€佹枃浠惰闂矾寰?涓嶆帹鑽愪娇鐢紝浣跨敤 static_url_path 浠f浛)static_url_path闈欐€佹枃浠惰闂矾寰勶紝鍙互涓嶄紶锛岄粯璁や负锛?code>/ + static_folderstatic_folder闈欐€佹枃浠跺瓨鍌ㄧ殑鏂囦欢澶癸紝鍙互涓嶄紶锛岄粯璁や负statictemplate_folder妯℃澘鏂囦欢瀛樺偍鐨勬枃浠跺す锛屽彲浠ヤ笉浼狅紝榛樿涓?nbsp;templates

3.鍔犺浇閰嶇疆鏂囦欢

鍦?Flask 绋嬪簭杩愯鐨勬椂鍊欙紝鍙互缁?Flask 璁剧疆鐩稿叧閰嶇疆锛屾瘮濡傦細閰嶇疆 Debug 妯″紡锛岄厤缃暟鎹簱杩炴帴鍦板潃绛夌瓑锛岃缃?Flask 閰嶇疆鏈変互涓嬩笁绉嶆柟寮忥細

浠庨厤缃璞′腑鍔犺浇(甯哥敤)app.config.form_object()浠庨厤缃枃浠朵腑鍔犺浇app.config.form_pyfile()浠庣幆澧冨彉閲忎腑鍔犺浇(涓嶅父鐢?app.config.from_envvar()

3.1閰嶇疆瀵硅薄鍔犺浇

# 閰嶇疆瀵硅薄锛岄噷闈㈠畾涔夐渶瑕佺粰 APP 娣诲姞鐨勪竴绯诲垪閰嶇疆class Config(object):    DEBUG = True# 鍒涘缓 Flask 绫荤殑瀵硅薄,鎸囧悜绋嬪簭鎵€鍦ㄧ殑鍖呯殑鍚嶇Оapp = Flask(__name__)# 浠庨厤缃璞′腑鍔犺浇閰嶇疆app.config.from_object(Config)

3.2閰嶇疆鏂囦欢鍔犺浇

鍒涘缓閰嶇疆鏂囦欢config.ini锛屽湪閰嶇疆鏂囦欢涓坊鍔犻厤缃?/p>

鏍煎紡eg: DEBUG = True

# 鍒涘缓 Flask 绫荤殑瀵硅薄,鎸囧悜绋嬪簭鎵€鍦ㄧ殑鍖呯殑鍚嶇Оapp = Flask(__name__)# 浠庨厤缃枃浠朵腑鍔犺浇閰嶇疆app.config.from_pyfile(鈥?/span>config.ini鈥?/span>)

3.4璇诲彇閰嶇疆

app.config.get()鍦ㄨ鍥惧嚱鏁颁腑浣跨敤 current_app.config.get()

娉細Flask 搴旂敤绋嬪簭灏嗕竴浜涘父鐢ㄧ殑閰嶇疆璁剧疆鎴愪簡搴旂敤绋嬪簭瀵硅薄鐨勫睘鎬э紝涔熷彲浠ラ€氳繃灞炴€х洿鎺ヨ缃?鑾峰彇鏌愪簺閰嶇疆锛歛pp.debug = True

4 璺敱瀹氫箟

4.1鎸囧畾璺敱鍦板潃

# 鎸囧畾璁块棶璺緞涓?hello@app.route(鈥?/span>/hello鈥?/span>)def demo1():    return 鈥?/span>hello world鈥?/span>

4.2缁欒矾鐢变紶鍙?/h3>
# 璺敱浼犻€掑弬鏁?/span>@app.route(鈥?/span>/user/<user_id>鈥?/span>)def user_info(user_id):    return 鈥?/span>hello %s鈥?/span> % user_id# 璺敱浼犻€掔殑鍙傛暟榛樿褰撳仛 string 澶勭悊锛屼篃鍙互鎸囧畾鍙傛暟鐨勭被鍨?/span># 璺敱浼犻€掑弬鏁?/span>@app.route(鈥?/span>/user/<int:user_id>鈥?/span>)def user_info(user_id):    return 鈥?/span>hello %d鈥?/span> % user_id

4.3鎸囧畾璇锋眰鏂瑰紡

鍦?Flask 涓紝瀹氫箟涓€涓矾鐢憋紝榛樿鐨勮姹傛柟寮忎负锛?/p>GETOPTIONS(鑷甫)HEAD(鑷甫)

@app.route(鈥?/span>/login鈥?/span>, methods=[鈥?/span>GET鈥?/span>, 鈥?/span>POST鈥?/span>])  # 鏀寔GET鍜孭OST锛屽苟涓旀敮鎸佽嚜甯︾殑OPTIONS鍜孒EADdef login():    # 鐩存帴浠庤姹備腑鍙栧埌璇锋眰鏂瑰紡骞惰繑鍥?/span>    return request.method

4.4 姝e垯鍖归厤璺敱

鍦?web 寮€鍙戜腑锛屽彲鑳戒細鍑虹幇闄愬埗鐢ㄦ埛璁块棶瑙勫垯鐨勫満鏅紝閭d箞杩欎釜鏃跺€欏氨闇€瑕佺敤鍒版鍒欏尮閰嶏紝鏍规嵁鑷繁鐨勮鍒欏幓闄愬畾璇锋眰鍙傛暟鍐嶈繘琛岃闂?/p>

鍏蜂綋瀹炵幇姝ラ涓猴細

瀵煎叆杞崲鍣ㄥ熀绫伙細鍦?Flask 涓紝鎵€鏈夌殑璺敱鐨勫尮閰嶈鍒欓兘鏄娇鐢ㄨ浆鎹㈠櫒瀵硅薄杩涜璁板綍鑷畾涔夎浆鎹㈠櫒锛氳嚜瀹氫箟绫荤户鎵夸簬杞崲鍣ㄥ熀绫?/li>娣诲姞杞崲鍣ㄥ埌榛樿鐨勮浆鎹㈠櫒瀛楀吀涓?/li>浣跨敤鑷畾涔夎浆鎹㈠櫒瀹炵幇鑷畾涔夊尮閰嶈鍒?/li>

锛?锛夊鍏ヨ浆鎹㈠櫒鍩虹被

from werkzeug.routing import BaseConverter

锛?锛夎嚜瀹氫箟杞崲鍣?/p>

# 鑷畾涔夋鍒欒浆鎹㈠櫒class RegexConverter(BaseConverter):    def __init__(self, url_map, *args):        super(RegexConverter, self).__init__(url_map)        # 灏嗘帴鍙楃殑绗?涓弬鏁板綋浣滃尮閰嶈鍒欒繘琛屼繚瀛?/span>        self.regex = args[0]

锛?锛夋坊鍔犺浆鎹㈠櫒鍒伴粯璁ょ殑杞崲鍣ㄥ瓧鍏镐腑锛屽苟鎸囧畾杞崲鍣ㄤ娇鐢ㄦ椂鍚嶅瓧涓? re

app = Flask(__name__)# 灏嗚嚜瀹氫箟杞崲鍣ㄦ坊鍔犲埌杞崲鍣ㄥ瓧鍏镐腑锛屽苟鎸囧畾杞崲鍣ㄤ娇鐢ㄦ椂鍚嶅瓧涓? reapp.url_map.converters[鈥?/span>re鈥?/span>] = RegexConverter

锛?锛変娇鐢ㄨ浆鎹㈠櫒鍘诲疄鐜拌嚜瀹氫箟鍖归厤瑙勫垯

# 褰撳墠姝ゅ瀹氫箟鐨勮鍒欐槸锛?浣嶆暟瀛?/span>@app.route(鈥?/span>/user/<re("[0-9]{3}"):user_id>鈥?/span>)def user_info(user_id):    return "user_id 涓?%s" % user_id
# 绯荤粺鑷甫杞崲鍣?/span>DEFAULT_CONVERTERS = {    鈥?/span>default鈥?/span>:          UnicodeConverter,    鈥?/span>string鈥?/span>:           UnicodeConverter,    鈥?/span>any鈥?/span>:              AnyConverter,    鈥?/span>path鈥?/span>:             PathConverter,    鈥?/span>int鈥?/span>:              IntegerConverter,    鈥?/span>float鈥?/span>:            FloatConverter,    鈥?/span>uuid鈥?/span>:             UUIDConverter,}# 绯荤粺鑷甫鐨勮浆鎹㈠櫒鍏蜂綋浣跨敤鏂瑰紡鍦ㄦ瘡绉嶈浆鎹㈠櫒鐨勬敞閲婁唬鐮佷腑鏈夊啓锛岃鐣欐剰姣忕杞崲鍣ㄥ垵濮嬪寲鐨勫弬鏁?/span>

鑷畾涔夎浆鎹㈠櫒鍏朵粬涓や釜鍑芥暟瀹炵幇锛?/p>

缁ф壙浜庤嚜瀹氫箟杞崲鍣ㄤ箣鍚庯紝杩樺彲浠ュ疄鐜?to_python 鍜?to_url 杩欎袱涓嚱鏁板幓瀵瑰尮閰嶅弬鏁板仛杩涗竴姝ュ鐞嗭細

to_python锛?璇ュ嚱鏁板弬鏁颁腑鐨?value 鍊间唬琛ㄥ尮閰嶅埌鐨勫€硷紝鍙緭鍑鸿繘琛屾煡鐪?/li>鍖归厤瀹屾垚涔嬪悗锛屽鍖归厤鍒扮殑鍙傛暟浣滄渶鍚庝竴姝ュ鐞嗗啀杩斿洖锛屾瘮濡傦細杞垚 int 绫诲瀷鐨勫€煎啀杩斿洖锛?/li>
class RegexConverter(BaseConverter):    def __init__(self, url_map, *args):        super(RegexConverter, self).__init__(url_map)        # 灏嗘帴鍙楃殑绗?涓弬鏁板綋浣滃尮閰嶈鍒欒繘琛屼繚瀛?/span>        self.regex = args[0]    def to_python(self, value):        return int(value)   # 鍦ㄨ鍥惧嚱鏁颁腑鍙互鏌ョ湅鍙傛暟鐨勭被鍨嬶紝鐢变箣鍓嶉粯璁ょ殑 str 宸插彉鎴?int 绫诲瀷鐨勫€?/span>
銆€銆€to_url:銆€銆€鍦ㄤ娇鐢?url_for 鍘昏幏鍙栬鍥惧嚱鏁版墍瀵瑰簲鐨?url 鐨勬椂鍊欙紝浼氳皟鐢ㄦ鏂规硶瀵?url_for 鍚庨潰浼犲叆鐨勮鍥惧嚱鏁板弬鏁板仛杩涗竴姝ュ鐞?/li>銆€銆€鍏蜂綋鍙弬瑙?Flask 鐨?app.py 涓啓鐨勭ず渚嬩唬鐮侊細ListConverter

Python Flask妗嗘灦璇﹁В

鏍囩锛?a href='http://www.byrx.net/so/1/%e6%96%87%e4%bb%b6%e5%8a%a0%e8%bd%bd' title='鏂囦欢鍔犺浇'>鏂囦欢鍔犺浇

鍘熸枃鍦板潃锛歨ttps://www.cnblogs.com/caijunchao/p/12663871.html

评论关闭