1、列舉django的內置組件?
url 、view、model、template、中間件
2、列舉django中間件的5個方法?以及django中間件的應用場景?
process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_exception(self, request, exception)
process_response(self, request, response)
3、django請求的生命周期?
前端請求—>nginx—>uwsgi.—>中間件—>url路由—->view試圖—>orm—->拿到數據返回給view—->試圖將數據渲染到模版中拿到字符串—->中間件—>uwsgi—->nginx—->前端渲染
4、django的request對象是在什么時候創建的?
當請求一個頁面時,Django會建立一個包含請求元數據的 HttpRequest 對象。 當Django 加載對應的視圖時,HttpRequest 對象將作為視圖函數的第一個參數。每個視圖會返回一個HttpResponse 對象。
5、only和defer的區別?
defer : 映射中排除某列數據
only : 僅取某個列中的數據
6、select_related和prefetch_related的區別?
select_related 通過多表join關聯查詢,一次性獲得所有數據,通過降低數據庫查詢次數來提升性能,但關聯表不能太多,因為join操作本來就比較消耗性能
prefetch_related() 的解決方法是,分別查詢每個表,然后用Python處理他們之間的關系! 都是為了減少SQL查詢的數量
7、values和values_list的區別?
values方法可以獲取number字段的字典列表。
values_list可以獲取number的元組列表。
values_list方法加個參數flat=True可以獲取number的值列表。
8、django中csrf的實現機制?
Django預防CSRF攻擊的方法是在用戶提交的表單中加入一個csrftoken的隱含值,這個值和服務器中保存的csrftoken的值相同,這樣做的原理如下:
1、在用戶訪問django的可信站點時,django反饋給用戶的表單中有一個隱含字段csrftoken,這個值是在服務器端隨機生成的,每一次提交表單都會生成不同的值
2、當用戶提交django的表單時,服務器校驗這個表單的csrftoken是否和自己保存的一致,來判斷用戶的合法性
3、當用戶被csrf攻擊從其他站點發送精心編制的攻擊請求時,由于其他站點不可能知道隱藏的csrftoken字段的信息這樣在服務器端就會校驗失敗,攻擊被成功防御
具體配置如下:
template中添加{%csrf_token%}標簽
9、django的模板中filter和simple_tag的區別?
simple_tag
-參數任意,但是不能作為if條件判斷的條件
filter
-參數最多只能有兩個,但是可以作為if條件判斷的條件。
10、django路由系統中name的作用?
name 可以用于在 templates, models, views ……中得到對應的網址,相當于“給網址取了個小名”,只要這個名字不變,網址變了也能通過名字獲取到。
11、簡述MVC和MTV
MVC: 模型 視圖 控制器
MTV: 模型 模板 視圖
12、談談你對restfull 規范的認識?
restful其實就是一套編寫接口的協議,協議規定如何編寫以及如何設置返回值、狀態碼等信息。
最顯著的特點:
restful: 給用戶一個url,根據method不同在后端做不同的處理,比如:post 創建數據、get獲取數據、put和patch修改數據、delete刪除數據。
no rest: 給調用者很多url,每個url代表一個功能,比如:add_user/delte_user/edit_user/
當然,還有協議其他的,比如:
版本,來控制讓程序有多個版本共存的情況,版本可以放在 url、請求頭(accept/自定義)、GET參數
狀態碼,200/300/400/500
url中盡量使用名詞,restful也可以稱為“面向資源編程”
api標示:
api.YueNet.com
www.YueNet.com/api/
13、接口的冪等性是什么意思?
一個接口通過首先進行1次訪問,然后對該接口進行N次相同訪問的時候,對訪問對象不造成影響,那么就認為接口具有冪等性。
比如:
* GET, 第一次獲取數據、第二次也是獲取結果,冪等。
* POST, 第一次新增數據,第二次也會再次新增,非冪等。
* PUT, 第一次更新數據,第二次不會再次更新,冪等。
* PATCH,第一次更新數據,第二次可能再次更新,非冪等。
* DELTE,第一次刪除數據,第二次不會再次刪除,冪等。
14、什么是RPC?
RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
15、Http和Https的區別?
超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS,為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
16、為什么要使用django rest framework框架?
1.客戶端-服務端分離
優點:提高用戶界面的便攜性,通過簡化服務器提高可伸縮性….
2.無狀態(Stateless):從客戶端的每個請求要包含服務器所需要的所有信息
優點:提高可見性(可以單獨考慮每個請求),提高了可靠性(更容易從局部故障中修復),提高可擴展性(降低了服務器資源使用)
3.緩存(Cachable):服務器返回信息必須被標記是否可以緩存,如果緩存,客戶端可能會重用之前的信息發送請求
優點:減少交互次數,減少交互的平均延遲
4.統一接口
優點:提高交互的可見性,鼓勵單獨改善組件
5.支持按需代碼(Code-On-Demand 可選)
優點:提高可擴展性
17、簡述 django rest framework框架的認證流程。
如何編寫?寫類并實現authticate
方法中可以定義三種返回值: (user,auth),認證成功 None , 匿名用戶 異常 ,認證失敗
流程: dispatch 再去request中進行認證處理
18、django rest framework如何實現的用戶訪問頻率控制?
a. 基于用戶IP限制訪問頻率
b. 基于用戶IP顯示訪問頻率(利于Django緩存)
c. view中限制請求頻率
d. 匿名時用IP限制+登錄時用Token限制
19、簡述什么是FBV和CBV?
django中請求處理方式有2種:FBV 和 CBV
FBV(function base views) 就是在視圖里使用函數處理請求。
CBV(class base views)就是在視圖里使用類處理請求 類需要繼承view
20、什么是wsgi?
WSGI(Web Server Gateway Interface,Web 服務器網關接口)則是Python語言中1所定義的Web服務器和Web應用程序之間或框架之間的通用接口標準。
WSGI就是一座橋梁,橋梁的一端稱為服務端或網關端,另一端稱為應用端或者框架端,WSGI的作用就是在協議之間進行轉化。WSGI將Web組件分成了三類:Web 服務器(WSGI Server)、Web中間件(WSGI Middleware)與Web應用程序(WSGI Application)。
Web Server接收HTTP請求,封裝一系列環境變量,按照WSGI接口標準調用注冊的WSGI Application,最后將響應返回給客戶端。
21、列舉django orm 中所有的方法(QuerySet對象的所有方法)
返回Query Set對象的方法有:
* all()
* filter()
* exclude()
* order_by()
* reverse()
* dictinct()
特殊的QuerySet:
* values() 返回一個可迭代的字典序列
* values_list() 返回一個可迭代的元祖序列
返回具體對象的:
* get()
* first()
* last()
返回布爾值的方法有:
* existe()
返回數學的方法有:
* count( )
----------------休止符---------------
web基礎太弱,需要盡快突擊強化,視頻加代碼,fighting。