Flask框架面试题
文章目錄
- 1.什么是Flask,有什么優點?
- 2.Flask-WTF是什么,有什么特點?
- 3.Flask腳本的常用方式是什么?
- 4.如何在Flask中訪問會話?
- 5.解釋Python Flask中的數據庫連接?
- 6.Flask框架依賴組件?
- 7.Flask藍圖的作用?
- 8.列舉使用過的Flask第三方組件?
- 9.簡述Flask上下文管理流程?
- 10.Flask中多app應用是怎么完成?
- 11.wtforms組件的作用?
- 12.Flask框架默認session處理機制?
- 13.lask中的g的作用
- 14.Flask中上下文管理主要涉及到了那些相關的類,這些類的主要作用
- 15.在Flask中實現WebSocket需要什么組件
1.什么是Flask,有什么優點?
答:
Flask是一個輕量級的Web框架,主要是用來寫接口的一個框架,實現前后端分離,提升開發效率,Flask 本身相當于一個內核,其他幾乎所有的功能都要用到擴展(郵件擴展 Flask-Mail,用戶認證 Flask-Login),都需要用第三方的擴展來實現。比如可以用 Flask-extension 加入 ORM、窗體驗證工具,文件上傳、身份驗證等。Flask 沒有默認使用的數據庫,可以選擇 MySQL,也可以用 NoSQL。
優點: 框架很輕量;更新時依賴小;專注于安全方面的bug
Werkzeug,一個WSGI工具包(web服務網關接口:是為python語言定義的web服務器和web應用程序或架構之間的一種簡單而通用的接口,其他語言也有類似的接口)
jinja2是基于python的模板引擎,功能類似于PHPP的smarty,能完全支持unicode,并具有繼承的沙箱執行環境,應用廣泛。
2.Flask-WTF是什么,有什么特點?
答: Flask-WTF是一個用于表單處理、校驗并提供CSRF驗證的功能的擴展庫;Flask-wtf能把正表單免受CSRF<跨站請求偽造>的攻擊
form.html
manage.py
from flask import Flask,render_template,request from flask_wtf import FlaskForm #導入繼承父類 from wtforms import StringField,PasswordField,SubmitField from wtforms.validators import Length,DataRequiredclass Login(FlaskForm): #繼承自FlaskForm類username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名長度為6~12位'),DataRequired(message='用戶名不能為空')])userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='密碼長度為6~12位'),DataRequired(message='密碼不能為空')])submit = SubmitField('登錄')@app.route('/wtf_form',methods=['GET','POST']) def wtf_form():form = Login() #實例化form對象if request.method == 'POST':if form.validate_on_submit(): #數據正確 并且驗證csrf通過print(request.form.get('userpass'))print(request.form.get('username'))return '數據提交成功'return render_template('wtf_form.html',form=form)#注: #1 methods 參數告訴Flask在URL映射中把這個視圖函數注冊為GET和POST請求的處理程序,默認GET #2 采用post請求可以通過對象很輕松訪問,GET 請求沒有主體,提交的數據以查詢字符串的形式附加到URL中 #3 validate_on_submit() 會調用username 字段上附屬的 DataRequired() 驗證函數。3.Flask腳本的常用方式是什么?
答: 在shell中運行腳本文件;在python編譯器中run
4.如何在Flask中訪問會話?
會話(seesion)會話數據存儲在服務器上。 會話是客戶端登錄到服務器并注銷的時間間隔。 需要在此會話中進行的數據存儲在服務器上的臨時目錄中。
from flask import session #導入會話對象 session['name'] = 'admin' # 給會話添加變量 session.pop('username', None) # 刪除會話的變量5.解釋Python Flask中的數據庫連接?
6.Flask框架依賴組件?
- Route(路由)
- templates(模板)
- Models(orm模型)
- blueprint(藍圖)
- Jinja2模板引擎
7.Flask藍圖的作用?
藍圖Blueprint實現模塊化的應用
book_bp = Blueprint('book', __name__)創建藍圖對象
藍圖中使用路由@book_bp.route('url')
在另一.py文件里導入和注冊藍圖from book import book_bp app.register_blueprint(book_bp)
作用: 將不同的功能模塊化;構建大型應用;優化項目結構;增強可讀性,易于維護(跟Django的view功能相似)
8.列舉使用過的Flask第三方組件?
flask_bootstrap:Bootstrap是由Twitter推出的一個用于前端開發的開源工具包,給予HTML、CSS、JavaScriot,提供簡潔、直觀、強悍的前端開發框架,是目前最受環境的前端框架。
安裝:pip install flask_bootstrap
Flask 擴展一般都在創建程序實例時初始化,下面是Flask_Bootstrap的初始化方法
加載:
from flask_bootstrap import Bootstrap
初始化:
app = Flask(__name__) Bootstrap(app)
flask-WTF:是一個關于表單的擴展庫,可以自動生成表單的HTML代碼和驗證提交的表單數據,并且提供跨站請求偽造(Cross-Site Request Forgery)保護的功能,使用非常方便。
flask_sqlalchemy
9.簡述Flask上下文管理流程?
- 請求到來時,將session和request封裝到ctx對象中
- 對session做補充
- 將包含了request和session的ctx對象放到一個容器中(每個請求都會根據線程/協程加一個唯一標識)
- 視圖函數使用的時候需要根據當前線程或協程的唯一標識,獲取ctx對象,再取ctx對象中取request和session(視圖函數使用的時候,需要根據當前線程獲取數據。)
- 請求結束時,根據當前線程/協程的唯一標記,將這個容器上的數據移除。
10.Flask中多app應用是怎么完成?
請求進來時,可以根據URL的不同,交給不同的APP處理
使用Flask類創建不同的app對象,然后借助DispatcherMiddleware類來實現。
11.wtforms組件的作用?
WTForms是一個支持多個web框架的form組件,主要用于對用戶請求數據進行驗證。
12.Flask框架默認session處理機制?
Flask的默認session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后編碼(base64),放到cookie里了。
過期時間是通過cookie的過期時間實現的。
為了防止cookie內容被篡改,session會自動打上一個叫session的hash串,這個串是經過session內容、SECRET_KEY計算出來的,看得出,這種設計雖然不能保證session里的內容不泄露,但至少防止了不被篡改。
13.lask中的g的作用
g 作為 flask 程序全局的一個臨時變量,充當者中間媒介的作用,我們可以通過它傳遞一些數據,g 保存的是當前請求的全局變量,不同的請求會有不同的全局變量,通過不同的thread id區別
14.Flask中上下文管理主要涉及到了那些相關的類,這些類的主要作用
LocalStack:幫助我們在local中把一個列表維護成一個棧,方便我們對列表中的數據進行添加和維護,有了LocalStack操作更加便捷。
Local:幫助我們為每個線程/協程開辟空間
15.在Flask中實現WebSocket需要什么組件
WebSocket是HTML5引入的新的通信協議,主要由Web客戶端和服務器實現,當然它也可以在Web之外實現。
與HTTP連接不同,WebSocket連接是客戶端和服務器之間永久的雙向通信通道,其中任何一個都可以啟動交換。 一旦建立,連接一直有效,直到其中一方斷開連接。
Flask-Sockets和Flask-SocketIO之間的主要區別在于前者僅僅將WebSocket協議(通過使用gevent-websocket項目)進行包裝,因此它只適用于原生支持WebSocket協議的瀏覽器,對于那些不支持WebSocket協議的較老的瀏覽器,就無法使用它了。 Flask-SocketIO則不同,通過前面的介紹,讀者應該已經知道了它不僅實現了WebSocket協議,并且對于那些不支持WebSocket協議的舊版瀏覽器,使用它也能夠實現相同的效果。新版舊版的瀏覽器都能使用他
另一個區別是Flask-SocketIO實現了SocketIO Javascript庫公開的消息傳遞協議。 Flask-Sockets只是實現通信通道,發送的是完全取決于應用程序。
總結
以上是生活随笔為你收集整理的Flask框架面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典算法-并查集、快速排序、字典序算法、
- 下一篇: vb如何调用计算机日历,跪求vb.net