Flask是一個Web框架,就是提供一個工具,庫和技術來容許你構建一個Web應用程序。這個Web應用程序能夠是一些Web頁面,博客,wiki,基於Web的應用或商業網站。python
Flask屬於微框架(micro-framework)這一類別,微架構一般是很小的不依賴外部庫的框架。
- 框架很輕量
- 更新時依賴小
- 專一於安全方面的bugmysql
Flask
輕量級web框架,默認依賴兩個外部庫:jinja2和Werkzeug WSGI工具
適用於作小型網站以及web服務的API,開發大型網站無壓力,但架構須要本身設計
與關係型數據庫的結合不弱於Django,而與非關係型數據庫的結合遠遠優於Djangoweb
Django
重量級web框架,功能齊全,提供一站式解決的思路,能讓開發者不用在選擇上花費大量時間。
自帶ORM(Object-Relational Mapping 對象關係映射)和模板引擎,支持jinja等非官方模板引擎。
自帶ORM使Django和關係型數據庫耦合度高,若是要使用非關係型數據庫,須要使用第三方庫
自帶數據庫管理app
成熟,穩定,開發效率高,相對於Flask,Django的總體封閉性比較好,適合作企業級網站的開發。
python web框架的先驅,第三方庫豐富sql
在 Flask 中,爲了處理 web 表單,咱們通常使用 Flask-WTF 擴展,它封裝了 WTForms,而且它有 驗證表單數據的功能。shell
使用 Flask-WTF 須要配置參數 SECRET_KEY。
CSRF_ENABLED 是爲了 CSRF(跨站請求僞造)保護。 SECRET_KEY 用來生成加密令牌,當 CSRF 激 活的時候,該設置會根據設置的密匙生成加密令牌。 數據庫
會話(seesion)會話數據存儲在服務器上。 會話是客戶端登陸到服務器並註銷的時間間隔。 須要在此會話中進行的數據存儲在服務器上的臨時目錄中。
from flask import session導入會話對象
session[‘name’] = ‘admin’給會話添加變量
session.pop(‘username’, None)刪除會話的變量編程
在腳本中以用第三方庫正常鏈接,用sql語句正常操做數據庫,如mysql關係型數據庫的pymsql庫
用ORM來進行數據庫鏈接,flask中典型的flask_sqlalchemy,已面向對象的方式進行數據庫的鏈接與操做flask
一、opions 返回服務器針對特定資源所支持的HTML請求方法 或web服務器發送*測試服務器功能(容許客戶端查看服務器性能)bootstrap
二、Get 向特定資源發出請求(請求指定頁面信息,並返回實體主體)瀏覽器
三、Post 向指定資源提交數據進行處理請求(提交表單、上傳文件),又可能致使新的資源的創建或原有資源的修改
四、Put 向指定資源位置上上傳其最新內容(從客戶端向服務器傳送的數據取代指定文檔的內容)
五、Head 與服務器索與get請求一致的相應,響應體不會返回,獲取包含在小消息頭中的原信息(與get請求相似,返回的響應中沒有具體內容,用於獲取報頭)
六、Delete 請求服務器刪除request-URL所標示的資源*(請求服務器刪除頁面)
七、Trace 回顯服務器收到的請求,用於測試和診斷
八、Connect HTTP/1.1協議中可以將鏈接改成管道方式的代理服務http服務器至少能實現get、head、post方法,其餘都是可選的
1xx —— 元數據
2xx —— 正確的響應
3xx —— 重定向
4xx —— 客戶端錯誤
5xx —— 服務端錯誤
100 Continue。客戶端應當繼續發送請求。
200 OK。請求已成功,請求所但願的響應頭或數據體將隨此響應返回。
201 Created。請求成功,而且服務器建立了新的資源。
301 Moved Permanently。請求的網頁已永久移動到新位置。 服務器返回此響應(對GET或HEAD請求的響應)時,會自動將請求者轉到新位置。
302 Found。服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
400 Bad Request。服務器不理解請求的語法。
401 Unauthorized。請求要求身份驗證。對於須要登陸的網頁,服務器可能返回此響應。
403 Forbidden。服務器拒絕請求。
404 Not Found。服務器找不到請求的網頁。
500 Internal Server Error。服務器遇到錯誤,沒法完成請求。
藍圖 /Blueprint 是 Flask 應用程序組件化的方法,能夠在一個應用內或跨越多個項目共用藍圖。 使用藍圖能夠極大地簡化大型應用的開發難度,也爲 Flask 擴展 提供了一種在應用中註冊服務的集中 式機制。
藍圖能夠分爲三個步驟:
1,建立一個藍圖對象
admin=Blueprint('admin',__name__)
2,在這個藍圖對象上進行操做,註冊路由,指定靜態文件夾,註冊模版過濾器
@admin.route('/')
def admin_home():
return 'admin_home'
3,在應用對象上註冊這個藍圖對象
app.register_blueprint(admin,url\_prefix='/admin')
藍圖的做用:
current_app、g 是應用上下文。 request、session 是請求上下文。
二者區別:
請求上下文:保存了客戶端和服務器交互的數據。
應用上下文:flask 應用程序運行過程當中,保存的一些配置信息,好比程序名、數據庫鏈接、應用信息等。
二者做用:
請求上下文(request context):
Flask 從客戶端收到請求時,要讓視圖函數能訪問一些對象,這樣才能處理請求。請求對象是一 個很好的例子,它封裝了客戶端發送的 HTTP 請求。 要想讓視圖函數可以訪問請求對象,一個顯而易見的方式是將其做爲參數傳入視圖函數,不過這會致使程序中的每一個視圖函數都增長一個參數,除了訪問請求對象,若是視圖函數在處理請求時還 要訪問其餘對象,狀況會變得更糟。爲了不大量無關緊要的參數把視圖函數弄得一團糟,Flask 使用上下文臨時把某些對象變爲全局可訪問。
應用上下文(application context):
它的字面意思是 應用上下文,但它不是一直存在的,它只是 request context 中的一個對 app的代理(人),所謂 local proxy。它的做用主要是幫助 request 獲取當前的應用,它是伴 request 而 生,隨 request 而滅的。
Flask 中有三個 session:
第一個:數據庫中的 session,例如:db.session.add()
第二個:在 flask_session 擴展中的 session,使用:from flask_session importSession,使用
第三方擴展的 session 能夠把信息存儲在服務器中,客戶端瀏覽器中只存儲 sessionid。 第三個:flask 自帶的 session,是一個請求上下文,使用:from flask import session。自帶的session 把信息加密後都存儲在客戶端的瀏覽器 cookie 中。Flask的默認session利用了Werkzeug的SecureCookie,把信息作序列化(pickle)後編碼(base64),放到cookie裏了。過時時間是經過cookie的過時時間實現的。爲了防止cookie內容被篡改,session會自動打上一個叫session的hash串,這個串是通過session內容、SECRET_KEY計算出來的,看得出,這種設計雖然不能保證session裏的內容不泄露,但至少防止了不被篡改。
概念: 對象關係映射(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換。
幾乎全部的程序裏面,都存在對象和關係數據庫。在業務邏輯層和用戶界面層中,咱們是面向對象的。當對象信息發生變化的時候,咱們須要把對象的信息保存在關係數據庫中。
ORM解決的主要問題是對象關係的映射。域模型和關係模型分別是創建在概念模型的基礎上的。域模型是面向對象的,而關係模型是面向關係的。通常狀況下,一個持久化類和一個表對應,類的每一個實例對應表中的一條記錄,類的每一個屬性對應表的每一個字段。
1.提升了開發效率。因爲ORM能夠自動對Entity對象與數據庫中的Table進行字段與屬性的映射,因此咱們實際可能已經不須要一個專用的、龐大的數據訪問層。
2.ORM提供了對數據庫的映射,不用sql直接編碼,可以像操做對象同樣從數據庫獲取數據。
17.Flask 中請求鉤子的理解?
爲了讓每一個視圖函數避免編寫重複功能的代碼,Flask提供了通用設施的功能,請求鉤子。
請求鉤子是經過裝飾器的形式實現的,支持如下四種:
1.before_first_request 在處理第一個請求前運行
2.before_request:在每次請求前運行
3.after_request:若是沒有未處理的異常拋出,在每次請求後運行
4.teardown_request:即便有未處理的異常拋出,在每次請求後運行