flask常見面試題

1. 什麼是Flask,有什麼優勢?

  概念解釋:html

  Flask是一個Web框架,就是提供一個工具,庫和技術來容許你構建一個Web應用程序.這個Web應用程序能夠是一些Web頁面,博客,wiki,基於Web的日裏應用或商業網站.python

  優勢:mysql

  Flask屬於微框架(micro-framework)這一類別,微架構一般是很小的不依賴外部庫的框架.
  - 框架很輕量
  - 更新時依賴小
  - 專一於安全方面的bugweb

  Flask的依賴:sql

  Werkzeug 一個WSGI工具包(web服務網關接口(Python Web Server Gateway Interface,縮寫爲WSGI)是爲python語言定義的web服務器和web應用程序或框架之間的一種簡單而通用的藉口,其餘語言也有相似的接口)
  jinja2模板引擎shell

 

2. Django和Flask有什麼區別?

  Flask:數據庫

  輕量級web框架,默認依賴兩個外部庫:jinja2和Werkzeug WSGI工具
  適用於作小型網站以及web服務的API,開發大型網站無壓力,但架構須要本身設計
  與關係型數據庫的結合不弱於Django,而與非關係型數據庫的結合遠遠優於Django編程

  Django:flask

  重量級web框架,功能齊全,提供一站式解決的思路,能讓開發者不用在選擇上花費大量時間.
  自帶ORM(Object-Relational Mapping 對象關係映射)和模板引擎,支持jinja等非官方模板引擎.
  自帶ORM使Django和關係型數據庫耦合度高,若是要使用非關係型數據庫,須要使用第三方庫
  自帶數據庫管理app
  成熟,穩定,開發效率高,相對於Flask,Django的總體封閉性比較好,適合作企業級網站的開發.
  python web框架的先驅,第三方庫豐富bootstrap


3. Flask-WTF是什麼,有什麼特色?

  Flask-wtf是一個用於表單處理,校驗並提供csrf驗證的功能的擴展庫
  Flask-wtf能把正表單免受CSRF<跨站請求僞造>的攻擊
  eg:
  form.html

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

  manage.py

 1 from flask import Flask,render_template,request  2 from flask_wtf import FlaskForm   #導入繼承父類
 3 from wtforms import StringField,PasswordField,SubmitField  4 from wtforms.validators import Length,DataRequired  5 
 6 class Login(FlaskForm):  #繼承自FlaskForm類
 7     username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名長度爲6~12位'),DataRequired(message='用戶名不能爲空')])  8     userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='密碼長度爲6~12位'),DataRequired(message='密碼不能爲空')])  9     submit = SubmitField('登陸') 10 
11 
12 @app.route('/wtf_form',methods=['GET','POST']) 13 def wtf_form(): 14     form = Login()  #實例化form對象
15     if request.method == 'POST': 16         if form.validate_on_submit():  #數據正確 而且驗證csrf經過
17             print(request.form.get('userpass')) 18             print(request.form.get('username')) 19             return '數據提交成功'
20     return render_template('wtf_form.html',form=form) 21 
22 #注:
23 #1 methods 參數告訴Flask在URL映射中把這個視圖函數註冊爲GET和POST請求的處理程序,默認GET
24 #2 採用post請求能夠經過對象很輕鬆訪問,GET 請求沒有主體,提交的數據以查詢字符串的形式附加到URL中
25 #3 validate_on_submit() 會調用username 字段上附屬的 DataRequired() 驗證函數。
View Code

 

4. Flask腳本的經常使用方式是什麼?

  在shell中運行腳本文件
  在python編譯器中run


5. 如何在Flask中訪問會話?

  會話(seesion)會話數據存儲在服務器上.會話是客戶端登陸到服務器並註銷的時間間隔.須要在此會話中進行的數據存儲在服務器上的臨時目錄中.
  from flask import session 導入會話對象
  session['name'] = 'admin' 給會話添加變量
  session.pop('username', None) 刪除會話的變量


6. Flask是一個MVC模型嗎?若是是,能夠示例一下嗎?

  flask是一個典型的MVC框架
  * MVC框架,圖形理解

  

  * flask項目中的MVC理解

  

 

7. 解釋Python Flask中的數據庫鏈接?

  python中的數據庫鏈接有兩種方式:

  在腳本中以用第三方庫正常鏈接,用sql語句正常操做數據庫,如mysql關係型數據庫的pymsql庫
  用ORM來進行數據庫鏈接,flask中典型的flask_sqlalchemy,已面向對象的方式進行數據庫的鏈接與操做


8. 談談restful?

 

9. 列舉Http請求中常見的請求方式?

  GET / POST / DELETE

 

10. 列舉Http請求中的狀態碼?

  404 請求的url地址不存在
  503 訪問限制有權限
  200 訪問成功
  302 重定向

 

11. 列舉Http請求中常見的請求頭?

  User-Agent:瀏覽器類型,若是Servlet返回的內容與瀏覽器類型有關,則該值很是有用.
  Cookie:這是最重要的請求頭信息之一
  Content-Type:請求類型

 

12. 什麼是wsgi?

  WSGI(Web Server Gateway Interface,Web 服務器網關接口)則是Python語言中所定義的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直接編碼,可以像操做對象同樣從數據庫獲取數據.
--------------------------------------------------------------- 
原文:http://www.javashuo.com/article/p-mojuixov-p.html

相關文章
相關標籤/搜索