Django Web應用開發實戰附錄A

Django面試題

1.Python解釋器有哪些類型,有什麼特點?

CPython:由C語言開發,而且使用範圍最廣泛
IPython:基於CPython的一個交互式計時器
PyPy:提高執行效率,採用JIT技術。對Python代碼進行動態編譯
JPython:運行在Java上的解釋器,直接把Python代碼編譯成Java字節碼執行
IronPython:運行在微軟.MET平臺上的解釋器,把Python編譯成.NET的字節碼

2.什麼是PEP8?

《Pyhon Enhancement Proposal》(8號Python增強提案)又叫PEP8,它是針對Python代碼格式而編訂的編寫規範指南,可以在Pycharm配置Autopep8模塊,將代碼自動調整爲PEP8風格。

 

3.什麼是Python之禪?

在Python交互模式下,輸入import this語句可以獲取具體的內容,它告訴大家如何寫出高效整潔的代碼。

4.使用json模式將字典轉換成JSON格式,默認將中文轉換成unicode,如何將中文保持不變?

import json
a = json.dumps({"name": "張三"}, ensure_ascii=False)
print(a)

 

5.如何輸出1-100的所有偶數?

# 方法1
[i for i in range(1, 101) if i % 2 == 0]

# 方法2
list(range(2, 101, 2))

 

6.Python的數據類型如何相互轉換?

數據類型可以使用str、list、tuple、dict和eval實現轉換,但轉換的數據格式必須符合數據格式要求,比如字符串"{'a':1}"只能轉換爲字典類型,不能轉化爲元組或列表。

7.數據庫Redis有哪些基本類型?

Redis支持5種數據類型:string(字符串)、hash(哈希)、list(列表)、set(集合)及zset(sorted set有序集合)

8.數據庫事務是什麼?

數據庫事務指作爲單個邏輯工作單元執行的一系列操作,要麼完全執行,要麼完全不執。行簡單滴說,事務就是併發控制的單位,是用戶定義一個操作序列。而一個邏輯工作單元要成爲事務就必須滿足ACID屬性:
A:原子性(Atomicity),事務中的操作要麼都不做,要麼全做。
C:一致性(Consistency):事務執行的結果必須使數據從一個一致性狀態轉換到另一個一致性狀態。
I:隔離性(Isolation),一個事務的執行不能被其他事務干擾。
D:持久性(Durability),一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。

9.函數裝飾器有什麼作用?舉例說明。

裝飾器就是一個函數,它可以在不需要做任何代碼變動的前提下給下一個函數增加額外功能,啓動裝飾的效果。它經常用於有切面需求的場景,比如插入日誌、性能測試、事務處理、緩存、權限校驗等場景。

 

10.什麼是metaclass?它有什麼應用場景?

metaclass即元類,它是創建類的類,所有的類都是由元類調用new方法創建的,重寫元類可以自由控制創建類的過程,比如使用元類創建單例模式或ORM框架,Django的ORM框架實現原理是通過重寫元類實現的。

11.列舉Django中間件常用的鉤子函數以及中間件的應用場景。

__init__():初始化函數,運行Django將自動執行該函數
process_request():完成請求對象的創建,但用戶訪問的網站尚未與網站的路由地址匹配。
process_view():完成用戶訪問的網址與網站路由的匹配,但尚未執行視圖函數。
process_exception():在執行視圖函數期間發生異常,比如代碼異常、主動拋出404異常等。
process_response():完成視圖的執行,但尚未將響應內容返回瀏覽器。
中間件不能滿足複雜的開發需求,還能減少視圖函數或視圖類的代碼量,比如編寫Cookie內容實現反爬機制、微信公衆號開發商城等

 

12.簡述Django的生命週期。

生命週期是從用戶發送HTTP請求到網站響應的過程,整個過程包含:發送HTTP請求-->Nginx-->uwsgi-->中間件-->路由-->視圖-->ORM-->從ORM獲取數據返回視圖-->視圖將數據傳遞給模板文件-->中間件-->uwsgi-->Nginx-->生成響應內容。

13.簡述什麼是FBV和CBV

使用視圖函數處理HTTP請求,即在視圖裏定義def函數,這種方式稱爲FBV(Function Based Views)在無需知道大量代碼的情況下,快速完成數據視圖的開發,這種累的形式實現響應與請求處理稱爲CBV(Class Based Views)。

 

14.select_related 和 prefetch_related的區別是什麼?

select_related通過多數據表關係關聯查詢,一次性獲得所有數據,只執行一次SQL查詢;
prefetch_related分別查詢每個表,然後根據它們之間的關係進行處理,執行了兩次查詢。

15.列舉Django編寫SQL語句的方法。

Django提供3種方法執行SQL語句,extra、raw、execute

16.模型的外鍵字段參數on_delete有什麼作用?

用於設置數據的刪除模式,刪除模型包括:CASCADE、PROTECT、SET_NULL、SET_DEFAULT

17.ORM的only 和 defer的區別是什麼?

# only只查詢部分模型字段,defer查詢指定字段之外的字段。
User.objects.all().only("id", "name", "age") # 查詢這3個字段
User.objects.all().defer("name") # 查詢name字段外的所有字段

 

18.簡述Django的values 和 values_list的區別。

values將查詢結果以列表表示,列表的每個元素以字典格式表示,每個鍵值對代表一個模型字段;
values_list以列表表示,列表每個元素以元組表示,元組每個元素代表模型字段的值。

19.簡述Django中的db first 和 code first。

db first根據現有數據表結構生成相應的模型對象,使用python manage.py inspectdb指令即可生成模型對象的定義過程;
code first是編寫模型對象的定義過程,由模型對象創建相應的數據表,依次執行makemigrations和migrate指令。

20.闡述Django中中CSRF實現原理。

(1)在用戶訪問網站時,Django在網頁表單中生成隱藏控件csrfmiddlewaretoken,控件屬性value的值是由Django隨機生成。
(2)當用戶提交表單時,Django校驗表單的csrfmiddlewaretoken與資金保存的是否一致,用來判斷當前請求是否合法。
(3)如果用戶被CSRF攻擊並從其他地方發起攻擊請求,由於其他地方不知道Django在網頁表單中生成隱藏控件csrfmiddlewaretoken的值,因此後臺校驗Django在網頁表單中生成隱藏控件csrfmiddlewaretoken失敗,攻擊就被成功防禦。

21.Django有哪些緩存方式?

Django提供5中不同的緩存方式:Memcached、數據庫緩存、文件系統緩存、本地內存緩存和虛擬緩存。

22.Django如何實現WebSocket?

官方推薦使用Channels。Channels通過將HTTP協議升級爲WebSocket協議,保證實時通信。也就是說,完全可以使用Channels實現實時通信,而不是使用長輪詢和計時器方式來保證僞實時通信。Channels通過改造Django框架,使Django既支持HTTP協議又支持WebSocket協議。

23.簡述Cookie 和 Session的區別

Cookie是從瀏覽器向服務器發送的數據,讓服務器能夠識別當前用戶,而服務器對Cookie的識別機制是通過Session實現的,Session存儲了當前用戶基本信息。由於Cookie是存儲在瀏覽器中的,就跟容易泄露用戶信息,並且Cookie大小不能超過4kb,不支持中文。因此,需要一種機制在服務器的某個域中存儲用戶數據,這個域就是Session。

 24.Django本身提供runserver,爲什麼不能用來部署(runserver與uWSGI的區別)?

runserver是調試Django時經常用到的方式,它使用Django自帶的WSGI Server運行。只要在開發測試中使用,並且runserver開啓方式是單進程的。
uWSGI是一種Web服務器它實現了WSGI、uwsgi、HTTP等協議。uwsgi是一種通信協議,而uWSGI是實現uwsgi和WSGI協議的Web服務器。
uWSGI具體超快的性能、低內存佔用等優點,並且搭配着Nginx組成項目的生產環境,能夠將用戶訪問請求與應用隔離,實現真正的網站部署。相對來說,這種方式支持的併發量更高,方便管理多進程,發揮多核的優勢,提升性能。

25.什麼是跨域訪問?Django如何解決跨域訪問?

跨域訪問指的是瀏覽器不能執行其他網站的JavaScript腳本,它是由瀏覽器的同源策略造成的,這是瀏覽器對JavaScript施加的安全限制。
解決跨域訪問有多種方式,目前最佳的解決方案是使用第三方功能應用Django Cors Headers。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章