Flask簡單示例1
Flask:用Python語言基於Werkzeug工具箱編寫的輕量級Web開發框架。
Flask和Django對比:
1.Django大而全,提供一站式解決方案,MVT模式,有ORM模式、後臺站點管理等功能。
2.Flask輕巧,簡潔,可擴充套件性強(Flask最重要特點),
其核心:WSGI 工具箱採用 Werkzeug(路由模組)
模板引擎則使用 Jinja2
#coding=utf-8
from flask import Flask, make_response, current_app, request
# 匯入Flask類
from settingsimport Config
# 匯入werkzeug的路由模組, 轉換器
from werkzeug.routing import BaseConverter
# Flask接受一個引數name,引數指向程式所在模組
# __name__引數作用,是為了確認程式所在的位置
# Flask預設建立靜態路由
# 預設引數是預設字串,不能是int整值,不能傳入python模組名
app = Flask(__name__)
# 配置物件可以匯入配置檔案,config配置物件,方法from_object,引入配置檔案
app.config.from_object(Config)
# 自定義轉換器
# 正則url作用:限制訪問(不符合條件的),優化訪問
class Regex(BaseConverter):
"""Base class for all converters"""
def __init__(self, map, *args):
super(Regex, self).__init__(map)
self.regex = args[0]
# 新增轉換器對映
app.url_map.converters['re'] = Regex
# 優化訪問路徑,處理請求高效
# 使用訪問物件,make_response,(響應物件)current_app,把指定的物件響應給瀏覽器
@app.route('/<re(".*"):filename>')
def demo5(filename):
if not filename:
filename == 'index.html'
else:
filename == 'html/' + filename
resp = make_response(current_app.send_static_file(filename))
return resp
正則
@app.route('/re/<re("[a-z]{6}"):num>')
def demo4(num):
return 'laowang11:%s' % num
# 自定義轉換器 Regex繼承BaseConverter類
class Regex(BaseConverter):
regex = '[0-9]{4}'
# 新增轉換器的對映
app.url_map.converters['re'] = Regex
@app.route('/<re:num>')
def demo3(num):
return 'langwang:%s' % num
# 狀態保持:因為http協議的無狀態,http使用TCP/IP協議
# web應用保持某種狀態,cookie的本質是字典
#1 設定cookie
@app.route('/setcookie')
def demo6():
resp = make_response('set cookies success')
resp.set_cookie('user', 'python', max_age=300)
return resp
# 2獲取cookie,request
@app.route('/getcookie')
def demo7():
resp = request.cookies.get('user')
return resp
# 定義檢視
# route方法的實現是通過轉換器,
# rule類儲存的一條路由規則,
# Map儲存所有路由規則,
# MapAdapter類負責匹配集體的url和檢視
# 檢視函式不能重名,路由可以從復,動態生成引數可以通過<>
# 動態生成引數,預設的資料型別str,相容數值型,不包括浮點型
@app.route('/',methods=['POST','GET'])#請求方法post, get,
def demo():
return 'hello world'
@app.route('/<float:name>', methods=['POST', 'GET'])
def demo2(name):
return 'LAOWANG:%s' % name
# 啟動伺服器
# 當檔案匯入其他檔案使用時,該表示式不成立, __name__==demo,
if __name__=='__main__':
# app.run(debug=True)開發環境debug=Ture開發區環境,程式碼有變動會自動更新,其他情況下,會記憶體洩漏
# 檢視所有路由對映
print app.url_map
app.run()