Django框架理解和使用常見問題

一、什麼是中間件?前端

中間件是介於request與response處理之間的一道處理過程,相對比較輕量級,而且在全局上改變django的輸入與輸出。linux

中間件通常作認證或批量請求處理,django中的中間件,實際上是一個類,在請求和結束後,django會根據本身的規則在合適的時機執行中間件中相應的方法。ios

如請求過來 執行process_request, view,process_response方法nginx

 

二、Django、Tornado、Flask各自的優點web

Django:Django無socket,django的目的是簡便,快速開發,並遵循MVC設計,多個組件能夠很方便的以「插件」形式服務於整個框架,
django有許多功能強大的第三方插件。django具備很強的可擴展性。
Tornado:它是非阻塞式服務器,並且速度至關快,得力於其 非阻塞的方式和對epoll的運用,Future對象,缺點:沒有session,須要自定製
Flask:是一個微型的web框架,配合SQLALchemy來使用,jinja2模板, werkzeug接口

三、 django版本,Python版本,linux版本docker

django:1.11
Python:3.6
linux:6.8數據庫


四、django的template的註釋是什麼樣子的django

單行:{#註釋#}
多行註釋:{%comment%}

五、django怎麼解決併發的跨域

nginx+uwsgi爲django提供高併發,nginx的併發能力強,在純靜態的web服務中更是突出其優越的地方,因爲底層使用epoll異步IO模型進行處理。

六、tornodo的ioloop知道是什麼嗎?瀏覽器

事件循環

七、select_related和prefetch_related,Q和F

select_related:一對多使用,查詢主動作連表
prefetch_related:多對多或者一對多的時候使用,不作連表,作屢次查詢
Q:用於構造複雜查詢條件
F:更新時用於獲取原來的值,專門取對象中某一列進行操做

八、什麼是ORM?

ORM,即Object-Relational Mapping(對象關係映射),它的做用是在關係型數據庫和業務實體對象之間作一個映射
ORM優缺點:
優勢:擺脫複雜的SQL操做,適應快速開發,讓數據結果變得簡單,數據庫遷移成本更低
缺點:性能較差,不適用於大型應用,複雜的SQL操做還須要經過SQL語句實現

九、CORS跨域資源共享

首先會發送"預檢"opption",請求,若是"預檢"成功,則發送真實數據。

十、Django的Form主要具備如下功能?

生成HTMl標籤,驗證用戶數據 is_vaild,HTML Form提交保留上次提交數據,初始化頁面顯示內容

 

 

十一、CBV和FBV

CBV在指定的類上面加上裝飾器或在此方法上面添加裝飾器 @method_decorator,並繼承view

十二、cookie及session

cookie:是保留在客戶端上面的一組鍵值對,cookie不是很安全,別人能夠分析存放在本地的cookie
session:是保存在服務器上面的一組鍵值對,依賴與cookie,安全指數比cookie高

1三、django的請求生命週期

請求先到uwsgi,把請求作一部分分裝給django框架,而後通過全部的中間件,路由,視圖,視圖處理再返回給中間件,中間件在返回給uwsgi,在返回給用戶。

1四、什麼是uwsgi和wsgi?

wsgi:是web服務器網關接口,是pyhton應用程序或框架和web服務器之間的一種接口,其普遍使用的是django框架。
uwsgi:是一個web服務器,它實現了wsgi協議,Nginx中HttpUwsgiModule的做用是與Uwsgi服務器進行交換。

Nginx中 HttpUwsgiModule的做用是與uWSGI服務器進行交換,爲何有了uwsgi爲何還須要Nginx?

由於nginx具有優秀的靜態內容處理能力,而後將動態內容轉發給uWSGI服務器,這樣能夠達到很好的客戶端響應

 

 

1五、解釋下django - debug -toolbar的使用

使用django開發站點時,可使用django-debug-toolbar來進行調試,在settings.py中添加 'debug—toolbar.midleware.Debug ToolbarMiddleware'到項目的MIDDLEWARE_CLASSES內。

 

1六、.ngnix的正向代理與反向代理
答:正向代理 是一個位於客戶端和原始服務器(originserver) 之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理。
反向代理正好相反,對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容本來就是它本身的同樣。

 

1七、對Django的認識
Django是走大而全的方向,它最出名的是其全自動化的管理後臺:只須要使用起ORM,作簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。
Django內置的ORM跟框架內的其餘模塊耦合程度高。應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利。
Django有超高的開發效率,其性能擴展有限;採用Django 的項目,在流量達到必定規模後,都須要對其進行重構,才能知足性能的要求。
Django適用的是中小型的網站,或者是做爲大型網站快速實現產品雛形的工具。
Django模板的設計哲學是完全的將代碼、樣式分離; Django 從根本上杜絕在模板中進行編碼、處理數據的可能。


18.性能測試loadrunner
LoadRunner,是一種預測系統行爲和性能的負載測試工具。經過以模擬上千萬用戶實施併發負載及實時性能監測的方式來確認和查找問題,LoadRunner可以對整個企業架構進行測試。

企業使用LoadRunner能最大限度地縮短測試時間,優化性能和加速應用系統的發佈週期。 LoadRunner可適用於各類體系架構的自動負載測試,能預測系統行爲並評估系統性能。

19.Docker
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux 機器上。
Docker從新定義了程序開發測試、交付和部署過程的開放平臺,
Docker則能夠稱爲構建一次,處處運行,這就是docker提出的「Build once,Run anywhere」,經過Docker能夠保持開發、測試和生產環境高度的一致。
Docker 容器相對於 VM 有如下幾個優勢:

  1. 啓動速度快,容器一般在一秒內能夠啓動,而 VM 一般要更久
  2. 資源利用率高,一臺普通 PC 能夠跑上千個容器
  3. 性能開銷小, VM 一般須要額外的 CPU 和內存來完成 OS 的功能,這一部分佔據了額外的資源

Docker 的容器利用了 LXC,管理利用了 namespaces 來作權限的控制和隔離, cgroups 來進行資源的配置,而且還經過 aufs 來進一步提升文件系統的資源利用率。

 

20.什麼是hadoop
Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。
Hadoop實現了一個分佈式文件系統(Hadoop DistributedFileSystem),簡稱HDFS。HDFS有高容錯性的特色,而且設計用來部署在低廉的硬件上;並且它提供高吞吐量來訪問應用程序的數據,適合那些有着超大數據集的應用程序。HDFS放寬了POSIX的要求,能夠以流的形式訪問文件系統中的數據。

Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS爲海量的數據提供了存儲,則MapReduce爲海量的數據提供了計算

21. Django重定向如何實現?用的什麼狀態碼?
使用HttpResponseRedirectredirect和reverse 狀態碼:302,301

22. Tornado 的核心是什麼?
Tornado 的核心是 ioloop 和 iostream 這兩個模塊,前者提供了一個高效的 I/O 事件循環,後者則封裝了一個無阻塞的 socket 。經過向 ioloop 中添加網絡 I/O 事件,利用無阻塞的 socket ,再搭配相應的回調函數,即可達到高效異步執行。

 

23.Django常見中間件:

緩存中間件:django.middleware.cache.UpdateCacheMiddleware   django.middleware.cache.FetchFromCacheMiddleware 開啓全站範圍的緩存。 若是開啓了這些緩存,任何一個由Django提供的頁面將會被緩存,緩存時長在CACHE_MIDDLEWARE_SECONDS中配置定義。

會話中間件:django.contrib.sessions.middleware.SessionMiddleware 開啓會話支持,session支持中間件,加入這個中間件,會在數據庫中生成一個django_session的表。

通用中間件:django.middleware.common.CommonMiddleware 通用中間件,處理一些URL

CSRF保護中間件:django.middleware.csrf.CsrfViewMiddleware 跨域請求僞造中間件。加入這個中間件,在提交表單的時候會必須加入csrf_token,cookie中也會生成一個名叫csrftoken的值,也會在header中加入一個HTTP_X_CSRFTOKEN的值來放置CSRF攻擊。

用戶受權中間件:django.contrib.auth.middleware.AuthenticationMiddleware 會在每一個HttpRequest對象到達view以前添加當前登陸用戶的user屬性,也就是能夠在view中經過request訪問user

消息中間件: django.contrib.messages.middleware.MessageMiddleware  展現一些後臺信息給前端頁面。若是須要用到消息,還須要在INSTALLED_APPS中添加django.contrib.message纔能有效。若是不須要,能夠把這兩個都刪除。

XFrameOptionsMiddleware中間件: django.middleware.clickjacking.XFrameOptionsMiddleware 防止經過瀏覽器頁面跨Frame出現clickjacking(欺騙點擊)攻擊出現。

相關文章
相關標籤/搜索