簡介:django
Flask框架包含兩個核心:Werkzeug工具箱,Jinja2模板引擎json
flask: 提供基本功能,屬於輕量級flask
django: 提供相對完整功能,重量級服務器
搭建虛擬環境cookie
Helloworld :app
#1.導入Flask類 from flask import Flask #2.建立Flask對象接收一個參數__name__,它會指向程序所在的包 app = Flask(__name__) #3.裝飾器的做用是將路由映射到視圖函數index @app.route('/') def index(): return 'Hello World' #4.Flask應用程序實例的run方法,啓動WEB服務器 if __name__ == '__main__': app.run()
初始化參數:框架
app = Flask(__name__) static_url_path靜態文件訪問路徑,默認爲:/ + static static_folder靜態文件存儲的文件夾,默認爲 static template_folder模板文件存儲的文件夾,默認爲 templates
加載參數:函數
from flask import Flask app = Flask(__name__) # 配置對象,裏面定義須要給 APP 添加的一系列配置 class Config(object): DEBUG = True app.config.from_object(Config)# 從配置對象中加載配置 #app.config.from_pyfile('config.ini')# 從配置文件中加載配置 #app.config.from_envvar('FLASKCONFIG')# 加載指定環境變量名稱所對應的相關配置 @app.route('/') def index(): return 'Hello World' if __name__ == '__main__': app.run(host="0.0.0.0", port=5000, debug = True)
路由:工具
設置路由,路徑,參數,請求方式post
# 路由傳遞參數,整數,get或post方式 @app.route('/user/<int:user_id>',methods=['GET', 'POST']) def user_info(user_id): return 'the num is %d' % user_id
響應:
# 生成json數據響應體 @app.route('/demo4') def demo4(): json_dict = { "user_id": 10, "user_name": "laowang" } return jsonify(json_dict) # 路由傳遞參數string @app.route('/user/<int:user_id>') def user_info(user_id): return 'hello %d' % user_id # 重定向redirect(url_for(‘’,參)) @app.route('/demo5') def demo5(): # 使用 url_for 生成指定視圖函數所對應的 url return redirect(url_for('user_info', user_id=100)) # 渲染響應render_response(‘’,name=name)
轉換器:
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
from flask import Flas k#導入基類轉換器 from werkzeug.routing import BaseConverter app = Flask(__name__) # 1.自定義類,繼承自BaseConverter class MyRegexConverter(BaseConverter): # 2.編寫初始化方法, init方法, 接收兩個參數, url_map, regex, 並初始化父類空間和子類空間 def __init__(self,url_map,regex): super(MyRegexConverter, self).__init__(url_map) self.regex = regex # 3.將自定義轉換器類,添加到默認的轉換列表中 app.url_map.converters['re'] = MyRegexConverter #使用自定義轉換器#接收3位整數 @app.route('/<re("\d{3}"):num>') def hello_world(num): print("num = %s"%num) return "the num is %s"%num #接收一個手機號 @app.route('/<re("1[345678]\d{9}"):mobile>') def get_phone_number(mobile): return "the mobile is %s"%mobile if __name__ == '__main__': app.run()
異常捕獲:
from flask import Flask,abort app = Flask(__name__) @app.route('/game/<int:age>') def play_game(age): #異常拋出 abort(404) return "helloworld" #異常捕獲 @app.errorhandler(404) def page_not_found(e): print(e) return "找不到服務器資源,服務器搬家了" if __name__ == '__main__': app.run()
鉤子:
請求鉤子是經過裝飾器的形式實現,Flask支持以下四種請求鉤子:
# 在第一次請求以前調用,能夠在此方法內部作一些初始化操做 @app.before_first_request def before_first_request(): print("before_first_request") # 在每次請求以前調用,直接return以後那麼就不會執行視圖函數 @app.before_request def before_request(): print("before_request") # 在執行完視圖函數以後會調用,而且會把視圖函數所生成的響應傳入,能夠在此方法中對響應作最後一步統一的處理 @app.after_request def after_request(response): print("after_request") response.headers["Content-Type"] = "application/json" return response # 請每一次請求以後都會調用,會接受一個參數,參數是服務器出現的錯誤信息 @app.teardown_request def teardown_request(e): print("teardown_request")
Request:
屬性 |
說明 |
類型 |
data |
記錄請求的數據,並轉換爲字符串 |
* |
form |
記錄請求中的表單數據 |
MultiDict |
args |
記錄請求中的查詢參數 |
MultiDict |
cookies |
記錄請求中的cookie信息 |
Dict |
headers |
記錄請求中的報文頭 |
EnvironHeaders |
method |
記錄請求使用的HTTP方法 |
GET/POST |
url |
記錄請求的URL地址 |
string |
files |
記錄請求上傳的文件 |
* |