日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask框架面试题

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask框架面试题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 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

<form action="{{ url_for('wtf_form') }}" method='post'>{{ form.csrf_token }} #進入csrf驗證<p>{{ form.username.label }}{{ form.username(style='color:red',placeholder='請輸入用戶名') }}{{ form.username.errors }}</p><p>{{ form.userpass.label }}{{ form.userpass() }}{{ form.userpass.errors }}</p><p>{{ form.submit() }}</p> </form>

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ù)庫連接?

  • 在腳本中以用第三方庫正常連接,用sql語句正常操作數(shù)據(jù)庫,如mysql關(guān)系型數(shù)據(jù)庫的pymsql庫
  • 用ORM來進行數(shù)據(jù)庫連接,flask中典型的flask_sqlalchemy,已面向?qū)ο蟮姆绞竭M行數(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。