flask面試常問問題總結
1. 解釋什麼是Flask及其好處?
Flask是一個Python編寫的Web微框架,讓我們可以使用Python語言快速實現一個網站或Web服務。
2. Django和Flask有什麼區別?
Flask
- Flask確實很“輕”,不愧是Micro Framework,從Django轉向Flask的開發者一定會如此感慨,除非二者均為深入使用過
- Flask自由、靈活,可擴充套件性強,第三方庫的選擇面廣,開發時可以結合自己最喜歡用的輪子,也能結合最流行最強大的Python庫
- 入門簡單,即便沒有多少web開發經驗,也能很快做出網站
- 非常適用於小型網站
- 非常適用於開發web服務的API
- 開發大型網站無壓力,但程式碼架構需要自己設計,開發成本取決於開發者的能力
- 各方面效能均等於或優於Django
- Django自帶的或第三方的好評如潮的功能,Flask上總會找到與之類似第三方
- Flask靈活開發,Python高手基本都會喜歡Flask,但對Django卻可能褒貶不
- Flask與關係型資料庫的配合使用不弱於Django,而其與NoSQL資料庫的配合遠遠優於Django
- Flask比Django更加Pythonic,與Python的philosophy更加吻合
Django
- Django太重了,除了web框架,自帶ORM和模板引擎,靈活和自由度不夠高
- Django能開發小應用,但總會有“殺雞焉用牛刀”的感覺
- Django的自帶ORM非常優秀,綜合評價略高於SQLAlchemy
- Django自帶的模板引擎簡單好用,但其強大程度和綜合評價略低於Jinja2
- Django自帶ORM也使Django與關係型資料庫耦合度過高,如果想使用MongoDB等NoSQL資料,需要選取合適的第三方庫,且總感覺Django+SQL才是天生一對的搭配,Django+NoSQL砍掉了Django的半壁江山
- Django目前支援Jinja等非官方模板引擎
- Django自帶的資料庫管理app好評如潮
- Django非常適合企業級網站的開發:快速、靠譜、穩定
- Django成熟、穩定、完善,但相比於Flask,Django的整體生態相對封閉
- Django是Python web框架的先驅,使用者多,第三方庫最豐富,最好的Python庫,如果不能直接用到Django中,也一定能找到與之對應的移植
- Django上手也比較容易,開發文件詳細、完善,相關資料豐富
3. Flask-WTF是什麼,有什麼特點?
Flask的簡單WTForms整合,包含CSRF、檔案上傳和Recaptcha整合。
flask-wtf可以保護表單免受跨站請求偽造(CSRF)的攻擊,惡意網站將請求傳送到被攻擊者已登入的其他網站時就會引發CSRF
4. Flask指令碼的常用方式是什麼?
- 在shell中執行指令碼檔案
- 在python編譯器中run
5. 如何在Flask中訪問會話?
一個會話基本上允許記住從一個請求到另一個請求的資訊。在Flask中,它使用簽名的cookie,以便使用者可以檢視會話內容並進行修改。使用者可以修改會話,只要它有金鑰Flask.secret_key。
- 會話(seesion)會話資料儲存在伺服器上。 會話是客戶端登入到伺服器並登出的時間間隔。 需要在此會話中進行的資料儲存在伺服器上的臨時目錄中。
- from flask import session匯入會話物件
- session[‘name’] = ‘admin’給會話新增變數
- session.pop(‘username’, None)刪除會話的變數
6. Flask是一個MVC模型嗎?如果是,可以示例一下嗎?
“””
基本上,Flask是一個簡單的框架,其行為與MVC框架相同。所以MVC是Flask的完美選擇.
“”“
7. 解釋Python Flask中的資料庫連線?
python中的資料庫連線有兩種方式
- 在指令碼中以用第三方庫正常連線,用sql語句正常操作資料庫,如mysql關係型資料庫的pymsql庫
- 用ORM來進行資料庫連線,flask中典型的flask_sqlalchemy,已面向物件的方式進行資料庫的連線與操作
8. 談談restful?
9. 列舉Http請求中常見的請求方式?
http請求中的8種請求方法
1、opions 返回伺服器針對特定資源所支援的HTML請求方法 或web伺服器傳送*測試伺服器功能(允許客戶端檢視伺服器效能)
2、Get 向特定資源發出請求(請求指定頁面資訊,並返回實體主體)
3、Post 向指定資源提交資料進行處理請求(提交表單、上傳檔案),又可能導致新的資源的建立或原有資源的修改
4、Put 向指定資源位置上上傳其最新內容(從客戶端向伺服器傳送的資料取代指定文件的內容)
5、Head 與伺服器索與get請求一致的相應,響應體不會返回,獲取包含在小訊息頭中的原資訊(與get請求類似,返回的響應中沒有具體內容,用於獲取報頭)
6、Delete 請求伺服器刪除request-URL所標示的資源*(請求伺服器刪除頁面)
7、Trace 回顯伺服器收到的請求,用於測試和診斷
8、Connect HTTP/1.1協議中能夠將連線改為管道方式的代理伺服器
http伺服器至少能實現get、head、post方法,其他都是可選的
10. 列舉Http請求中的狀態碼?
1xx: 資訊
2XX:成功
3XX:重定向
4XX:客戶端錯誤
5XX:伺服器錯誤
11. 列舉Http請求中常見的請求頭?
•Accept:瀏覽器可接受的MIME型別
•Accept-Charset: 瀏覽器通過這個頭告訴伺服器,它支援哪種字符集
•Accept-Encoding:瀏覽器能夠進行解碼的資料編碼方式,比如gzip
•Accept-Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。可以在瀏覽器中進行設定。
•Host:初始URL中的主機和埠
•Referer:包含一個URL,使用者從該URL代表的頁面出發訪問當前請求的頁面
•Content-Type:內容型別
•If-Modified-Since: Wed, 02 Feb 201112:04:56 GMT利用這個頭與伺服器的檔案進行比對,如果一致,則從快取中直接讀取檔案。
•User-Agent:瀏覽器型別.
•Content-Length:表示請求訊息正文的長度
•Connection:表示是否需要持久連線。如果伺服器看到這裡的值為“Keep -Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1預設進行持久連線
•Cookie:這是最重要的請求頭資訊之一
•Date:Date: Mon, 22 Aug 2011 01:55:39 GMT請求時間GMT
12. 什麼是wsgi?
- WSGI(Web Server Gateway Interface,Web 伺服器閘道器介面)則是Python語言中1所定義的Web伺服器和Web應用程式之間或框架之間的通用介面標準。
- WSGI就是一座橋樑,橋樑的一端稱為服務端或閘道器端,另一端稱為應用端或者框架端,WSGI的作用就是在協議之間進行轉化。WSGI將Web元件分成了三類:Web 伺服器(WSGI Server)、Web中介軟體(WSGI Middleware)與Web應用程式(WSGI Application)。
- Web Server接收HTTP請求,封裝一系列環境變數,按照WSGI介面標準呼叫註冊的WSGI Application,最後將響應返回給客戶端。
13. Flask框架依賴元件?
- Route(路由)
- templates(模板)
- Models(orm模型)
- blueprint(藍圖)
- Jinja2模板引擎
14. Flask藍圖的作用?
藍圖Blueprint實現模組化的應用
book_bp = Blueprint(‘book’, name)建立藍圖物件
藍圖中使用路由@book_bp.route(‘url’)
在另一.py檔案裡匯入和註冊藍圖
from book import book_bp app.register_blueprint(book_bp)
作用
- 將不同的功能模組化
- 構建大型應用
- 優化專案結構
- 增強可讀性,易於維護(跟Django的view功能相似)
15. 列舉使用過的Flask第三方元件?
- flask_bootstrap
- flask-WTF
- flask_sqlalchemy
16. 簡述Flask上下文管理流程?
每次有請求過來的時候,flask 會先建立當前執行緒或者程序需要處理的兩個重要上下文物件,把它們儲存到隔離的棧裡面,這樣檢視函式進行處理的時候就能直接從棧上獲取這些資訊。
17. Flask中多app應用是怎麼完成?
請求進來時,可以根據URL的不同,交給不同的APP處理
18. wtforms元件的作用?
WTForms是一個支援多個web框架的form元件,主要用於對使用者請求資料進行驗證。
19. Flask框架預設session處理機制?
Flask的預設session利用了Werkzeug的SecureCookie,把資訊做序列化(pickle)後編碼(base64),放到cookie裡了。
過期時間是通過cookie的過期時間實現的。
為了防止cookie內容被篡改,session會自動打上一個叫session的hash串,這個串是經過session內容、SECRET_KEY計算出來的,看得出,這種設計雖然不能保證session裡的內容不洩露,但至少防止了不被篡改
20. ORM的實現原理?
概念: 物件關係對映(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換。
詳細介紹:讓我們從O/R開始。字母O起源於”物件”(Object),而R則來自於”關係”(Relational)。幾乎所有的程式裡面,都存在物件和關係資料庫。在業務邏輯層和使用者介面層中,我們是面向物件的。當物件資訊發生變化的時候,我們需要把物件的資訊儲存在關係資料庫中。
當你開發一個應用程式的時候(不使用O/R Mapping),你可能會寫不少資料訪問層的程式碼,用來從資料庫儲存,刪除,讀取物件資訊,等等。你在DAL中寫了很多的方法來讀取物件資料,改變狀態物件等等任務。而這些程式碼寫起來總是重複的。
ORM解決的主要問題是物件關係的對映。域模型和關係模型分別是建立在概念模型的基礎上的。域模型是面向物件的,而關係模型是面向關係的。一般情況下,一個持久化類和一個表對應,類的每個例項對應表中的一條記錄,類的每個屬性對應表的每個欄位。
ORM技術特點:
1.提高了開發效率。由於ORM可以自動對Entity物件與資料庫中的Table進行欄位與屬性的對映,所以我們實際可能已經不需要一個專用的、龐大的資料訪問層。
2.ORM提供了對資料庫的對映,不用sql直接編碼,能夠像操作物件一樣從資料庫獲取資料。