Flask開發(fā)環(huán)境配置
Flask快速入門
Flask實踐Step by Step -- 'Hello World'
Flask實踐Step by Step -- 模板
Flask實踐Step by Step -- Web表單
假設(shè)你已經(jīng)安裝了Flask,如果沒有安裝請參考 Flask開發(fā)環(huán)境配置
小程序
Flask小程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
app.run()
保存為hello.py,但是最好不要保存為flask.py,這樣會和Flask本身有沖突
然后就可以再瀏覽器中輸入 http://127.0.0.1:5000
,就可以看到 Hello World!
分析一下上面這段代碼:
- 引入Flask類
- 創(chuàng)建了一個Flask的實例
- 使用了一個裝飾器,使得訪問URL時,觸發(fā)對應(yīng)的方法
- 訪問方法返回相關(guān)的內(nèi)容
- 運行run方法
停止 Server惠奸,使用Ctrl-C
調(diào)試模式
上面的run()
方法會啟動一個本地的開發(fā)服務(wù)器,但是你每次修改代碼之后宇整,就需要重新啟動這個服務(wù)器
這樣的開發(fā)體驗不是很好晌坤,F(xiàn)lask提供一個更好的方式,在開發(fā)時丈牢,我們可以使用調(diào)試模式祭钉,這樣每次如果
有代碼修改服務(wù)器就會自動重新加載,有兩種方式打開調(diào)試模式
- 設(shè)置對應(yīng)的flag值為true
app.debug = True
app.run()
- 在執(zhí)行run方法時己沛,傳入相應(yīng)的參數(shù)
app.run(debug=True)
這兩種方式的效果是一樣的
但是在部署的環(huán)境中慌核,不建議使用開發(fā)者模式,這樣看會有潛在的風(fēng)險申尼,可能會執(zhí)行一些惡意代碼
URL路由
現(xiàn)在的web應(yīng)用都有很簡潔漂亮的URL垮卓,這樣的URL更便于人們記憶,尤其是在現(xiàn)在移動設(shè)備比較流行
的時代师幕,這樣更方便在移動端訪問
在上面的代碼中我們可以看到粟按,使用了route()
的裝飾器,來綁定一個方法和對應(yīng)的URL
@app.route('/')
def index():
return "Index page"
@app.route('/hello')
def hello():
return "Hello World!!"
但是還可以根據(jù)不同的規(guī)則生成一些動態(tài)的URL
變量規(guī)則
可以在URL中添加變量霹粥,需要用到 <variable_name>
這種方式灭将,對應(yīng)的方法需要接受這個參數(shù)
也可以在變量中加入不同的規(guī)則,具體的寫法是 <converter:variable_name>
@app.route('/user/<usrname>')
def show_user_profile(username):
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id
轉(zhuǎn)換器包括:
類型 | 描述 |
---|---|
string | (默認) 文本不接受斜線 |
int | int型數(shù)字 |
float | 浮點型數(shù)字 |
path | 文本可以包含斜線 |
any | |
uuid | uuid文本 |
URL唯一/重定向行為
Flask的URL的規(guī)則是基于Werkzeug的路由規(guī)則后控,受到Apache和早期HTTP Server的影響
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'about page'
中兩個路由看起來沒有太大區(qū)別庙曙,第一個路由結(jié)尾有/,第二個路由結(jié)尾沒有/,在訪問時會有什么影響呢
第一種情況,如果訪問時沒有結(jié)尾的/,Flask會重定向到對應(yīng)的有/的方法
第二種情況浩淘,如果訪問時結(jié)尾帶/,那么就會報404 'Not Fount'的錯誤
HTTP方法
HTTP協(xié)議有不同的方法供URL訪問捌朴,默認提供是GET方法,但是可以在路由中通過參數(shù)來改變
@app.route('/login',methods=['GET','POST'])
def login():
if request.method == 'POST':
do_the_login()
else :
show_the_login_form()
這個login方法张抄,兩種方式都可以訪問
- GET
- POST
- HEAD
- PUT
- DELETE
- OPTIONS
靜態(tài)文件
在動態(tài)網(wǎng)頁中也需要靜態(tài)文件砂蔽,通常是CSS和JavaScript文件,在Flask中只需創(chuàng)建一個 static
的文件夾欣鳖,然后將文件放進去即可察皇,可以使用下面的方法生成靜態(tài)文件的路由
url_for('static',filename='style.css')
渲染模板
開發(fā)人員是不希望通過python來寫HTML文件的,這樣太繁瑣了泽台,在Flask中提供了Jinja2的引擎來
渲染HTML模板
渲染模板只需要 render_template()
方法即可什荣,你只需要將需要渲染的文件名傳入即可
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html',name=name)
Flask會在templates文件夾中對應(yīng)的文件,兩種情況的文件的分布如下:
- moudle
2.package