flask小例
#寫一個app.py,處理3個URL:
‘‘‘
GET / : 首頁,返回Home;
GET /signin:登錄頁,顯示登錄表單;
POST /signin: 處理登錄表單,顯示登錄結果。
‘‘‘
#註意,同一個URL/signin 分別有GET和POST兩種請求,映射到兩個處理函數中。
#Flask通過Python的裝飾器在內部自動地把URL和函數給關聯起來:
from flask import Flask #First we imported the Flask class. An instance of this class will be our WSGI application.
from flask import request
app=Flask(__name__)
#創建了一個Flask實例. 第一個參數是 這個應用的模塊(module)或包(package)的名字
#如果你使用單個模塊,第一個參數就應該是 __name__ because depending on if it‘s started as application or
#imported as module the name will be different(‘__main__‘ versus the actual import name).this is needed so that Flask knows where to look
#for templates,static file,and so on .
@app.route(‘/‘,methods=[‘GET‘,‘POST‘])
#route() decorator 告訴 Flask 什麽URL 指向該功能/函數 .
#http 有不同的響應方式對於URLs.默認的是GET ,可以通過提供參數methods的值來改變,可能的值有 GET HEAD POST PUT DELETE OPTIONS
def home():
return ‘<h1>Home</h1>‘
@app.route(‘/signin‘,methods=[‘GET‘])
def signin_form():
return ‘‘‘
<form action="/signin" method="post">
<p><input name="username"></p>
<p><input name="password" type="password"></p>
<p><button type="submit">Sign In</button></p>
</form>‘‘‘
@app.route(‘/signin‘,methods=[‘POST‘])
def signin():
#需要從request對象讀取表單內容:
if request.form[‘username‘]==‘admin‘ and request.form[‘password‘]==‘password‘:
return ‘<h3>Hello,admin!</h3>‘
return ‘<h3>Bad username or password.</h3>‘
if __name__==‘__main__‘:
app.run()
#運行python flask_1.py,Flask自帶的Server在端口5000上監聽:
#打開瀏覽器,輸入首頁地址http://localhost:5000/ ,顯示首頁
#輸入http://localhost:5000/signin,會顯示登錄表單,輸入預設的用戶名admin和口令password,登錄成功,輸入其他錯誤的用戶名和口令,登錄失敗
‘‘‘
除了Flask,常見的Python Web框架還有:
Django:全能型Web框架;
web.py:一個小巧的Web框架;
Bottle:和Flask類似的Web框架;
Tornado:Facebook的開源異步Web框架
‘‘‘
‘‘‘
有了Web框架,我們在編寫Web應用時,註意力就從WSGI處理函數轉移到URL+對應的處理函數,這樣,編寫Web App就更加簡單了。
在編寫URL處理函數時,除了配置URL外,從HTTP請求拿到用戶數據也是非常重要的。Web框架都提供了自己的API來實現這些功能。
Flask通過request.form[‘name‘]來獲取表單的內容。
‘‘‘
from flask import Flask ,render_template
app=Flask(__name__)
@app.route(‘/‘)
def hello():
return ‘歡迎光臨,你好!‘
@app.route(‘/about‘)
def about():
return ‘這是一個使用Flask建立的小網站測試‘
@app.route(‘/user/‘)
@app.route(‘/user/<username>‘)
def show_user(username=None):
return render_template(‘show_user.html‘, name=username)
if __name__ == ‘__main__‘:
app.run()
http://127.0.0.1:5000/user/tony,輸入這個鏈接,tony會作為入參放在username中。
flask也提供了網頁模板功能(采用Jinja2模板引擎),讓開發者把一些固定的使用的.html文件放在templates目錄下。
從網站上讀取數據(首先要建立一個窗體的網頁,使用request模塊獲取窗體內的數據):
@app.route(‘/login‘,methods=[‘POST‘,‘GET‘])
def login():
error=None
if request.method==‘POST‘:
username=request.form[‘username‘]
password=request.form[‘password‘]
...處理用戶驗證的程序代碼...
return render_templates(‘login.html‘,error=error)
flask小例