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