程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【django】django面試題總結

編輯:Python

一、django中間件的使用

Django在中間件中預置了六個方法,這六個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下:

1.初始化:無需任何參數,服務器響應第一個請求的時候調用一次,用於確定是否啟用當前中間件

def __init__():
pass

2.處理請求前:在每個請求上調用,返回None或HttpResponse對象。

def process_request(request):
pass

3.處理視圖前:在每個請求上調用,返回None或HttpResponse對象。

def process_view(request,view_func,view_args,view_kwargs):
pass

4.處理模板響應前:在每個請求上調用,返回實現了render方法的響應對象。

def process_template_response(request,response):
pass

5.處理響應後:所有響應返回浏覽器之前被調用,在每個請求上調用,返回HttpResponse對象。

def process_response(request,response):
pass

6.異常處理:當視圖拋出異常時調用,在每個請求上調用,返回一個HttpResponse對象。

def process_exception(request,exception):
pass

二、簡述Django請求生命周期

一般是用戶通過浏覽器向我們的服務器發起一個請求(request),這個請求會去訪問視圖函數,如果不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶; 視圖函數調用模型類去數據庫查找數據,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。

1.wsgi ,請求封裝後交給web框架(Flask,Django)
2.中間件,對請求進行校驗或在請求對象中添加其他相關數據,例如:csrf,request.session
3.路由匹配 根據浏覽器發送的不同url去匹配不同的視圖函數
4.視圖函數,在視圖函數中進行業務邏輯的處理,可能涉及到:orm,templates
5.中間件,對響應的數據進行處理
6.wsgi,將響應的內容發送給浏覽器

三、對cookies與session的了解?他們能單獨用嗎?

Session采用的是在服務器端保持狀態的方案,而Cookie采用的是在客戶端保持狀態的方案。但是禁用Cookie就不能得到Session。因為Session是用Session ID來確定當前對話所對應的服務器Session,而Session ID是通過Cookie來傳遞的,禁用Cookie相當於SessionID,也就得不到Session。

四、Django中哪裡用到了線程?哪裡用到了協程?哪裡用到了進程?

1.Django中耗時的任務用一個進程或者線程來執行,比如發郵件,使用celery.

2.部署django項目是時候,配置文件中設置了進程和協程的相關配置。

五、談一下你對uWSGI和nginx的理解?

1.uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規范。

要注意WSGI/uwsgi/uWSGI這三個概念的區分。

WSGI是一種通信協議。

為什麼有了uWSGI為什麼還需要nginx?
因為nginx具備優秀的靜態內容處理能力,然後將動態內容轉發給uWSGI服務器,這樣可以達到很好的客戶端響應。
nginx 是一個開源的高性能的HTTP服務器和反向代理:

1.作為web服務器,它處理靜態文件和索引文件效果非常高

2.它的設計非常注重效率,最大支持5萬個並發連接,但只占用很少的內存空間

3.穩定性高,配置簡潔。

4.強大的反向代理和負載均衡功能,平衡集群中各個服務器的負載壓力應用

六、用的restframework完成api發送時間時區

class getCurrenttime(APIView):
def get(self,request):
local_time = time.localtime()
time_zone =settings.TIME_ZONE
temp = {
'localtime':local_time,'timezone':time_zone}
return Response(temp)

七、Django、Flask、Tornado的對比

1、 Django走的大而全的方向,開發效率高。它的MTV框架,自帶的ORM,admin後台管理,自帶的sqlite數據庫和開發測試用的服務器,給開發者提高了超高的開發效率。 重量級web框架,功能齊全,提供一站式解決的思路,能讓開發者不用在選擇上花費大量時間。
自帶ORM和模板引擎,支持jinja等非官方模板引擎。

自帶ORM使Django和關系型數據庫耦合度高,如果要使用非關系型數據庫,需要使用第三方庫

自帶數據庫管理app

成熟,穩定,開發效率高,相對於Flask,Django的整體封閉性比較好,適合做企業級網站的開發。python web框架的先驅,第三方庫豐富

2、 Flask 是輕量級的框架,自由,靈活,可擴展性強,核心基於Werkzeug WSGI工具 和jinja2 模板引擎

適用於做小網站以及web服務的API,開發大型網站無壓力,但架構需要自己設計

與關系型數據庫的結合不弱於Django,而與非關系型數據庫的結合遠遠優於Django

3、 Tornado走的是少而精的方向,性能優越,它最出名的異步非阻塞的設計方式

Tornado的兩大核心模塊:

iostraem:對非阻塞的socket進行簡單的封裝

ioloop: 對I/O 多路復用的封裝,它實現一個單例


  1. 上一篇文章:
  2. 下一篇文章:
相關文章
    没有相关文章
Copyright © 程式師世界 All Rights Reserved