1. 程式人生 > >flask小例

flask小例

全能 cal 端口 網站測試 常見 用戶數據 第一個 t對象 server

#寫一個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小例