1.MVC Model View Controller 模型 視圖 控制器 Django MTV Model Template View 模型 模板文件 業務處理 2.web框架的本質: socket服務端與瀏覽器的通訊 1. socket服務端功能劃分: a. 負責與瀏覽器收發消息(socket通訊) --> wsgiref/uWsgi/gunicorn... b. 根據用戶訪問不一樣的路徑執行不一樣的函數 c. 從HTML讀取出內容,而且完成字符串的替換 --> jinja2(模板語言) 2. Python中 Web框架的分類: 1. 按上面三個功能劃分: 1. 框架自帶a,b,c --> Tornado 2. 框架自帶b和c,使用第三方的a --> Django 3. 框架自帶b,使用第三方的a和c --> Flask 2. 按另外一個維度來劃分: 1. Django --> 大而全(你作一個網站能用到的它都有) 2. 其餘 --> Flask 輕量級 3. Django請求生命週期? 客戶端發送請求,wsgi(socket)接受請求並處理請求初步封裝,在進入Django 進行二次封裝,在通過中間件作效驗和認證,好比session和csrf_token處理,由url分發請求, 到相應視圖進行業務邏輯處理,可能涉及到:ORM,和templates=》渲染,而後再通過url到中間件, 中間件返回給wsgi,到wsgi將相應的內容返還給瀏覽器 4. 什麼是ORM? ORM,即Object-Relational Mapping(對象關係映射),它的做用是在關係型數據庫和業務實體對象之間作一個映射 ORM優缺點: 優勢:擺脫複雜的SQL操做,適應快速開發,讓數據結果變得簡單,數據庫遷移成本更低 缺點:性能較差,不適用於大型應用,複雜的SQL操做還須要經過SQL語句實現 5. orm操做 - select_related,連表操做,至關於主動作join - prefeth_related,屢次單表操做,先查詢想要的數據,而後構造條件,如:id=[1,2,3],再次查詢其餘表根據id作條件。 - only 僅僅查看列出的 - defer 排除列出的 - F 專門取對象中某列值的操做 - Q 用於構造複雜查詢條件 - models.User.objects.using("db1").all() 選擇連接的數據庫 - 經過ORM寫偏原生SQL: - extra - raw - 原生SQL 6. Cookie是什麼 保存在瀏覽器端的鍵值對,cookie不是很安全,別人能夠分析存放在本地的cookie 爲何要有Cookie? 由於HTTP請求是無狀態的 Cookie的原理? 服務器能夠在返回響應的時候作在瀏覽器上寫入鍵值對(Cookie) 瀏覽器發送請求的時候會自動攜帶該網站保存在我瀏覽器的鍵值對(Cookie) 7.Session是什麼 Session保存在服務端的鍵值對,依賴與cookie,安全指數比cookie高 8. 使用中間件作過什麼? 在視圖執行以前幫助咱們定製一些操做(process_request, process_response) - 內置 - csrf 用來效驗的字符串,防止跨站攻擊 - session 「會話控制」,放在服務器的鍵值對 - 自定義 - 登陸認證 再也不須要在每一個函數中添加裝飾器 - 權限 當用戶登陸時候獲取當前用戶全部權限並放入session,而後再次訪問其餘頁面, 獲取當前url並在session中進行匹配。成功(True),失敗(False) - cors 跨域中間件,設置響應頭,容許你的一些跨域操做.應用:本地開始先後端分離時使用。 9. 爲何會有跨域? 瀏覽器具備同源策略全部纔出現跨域。 同源策略: - 開放:src - 禁止:ajax 解決跨域: - JSONP(動態建立script標籤,先定義一個函數,服務端返回數據函數名加括號執行) PS: jsonp只能發送GET請求 - cors,設置響應頭 - 簡單請求 - 複雜請求 - options請求作預檢 - PUT/POST.... 在django中解決方案: - 中間件中設置響應頭,django中的一個第三方組件:cors 10. 常見請求頭 - Content-Type (請求體or響應體的類型) - User-Agent (本機和瀏覽器信息) - referer (能夠作圖片防盜鏈) - Host (本機IP和域名,域名能夠有多個) - cookies (服務器保存在本地瀏覽器的鍵值對,配合session使用) 11. 常見的請求體? Form表單提交: Ajax請求: 補充:django中獲取請求體 - request.POST - request.body 12. django組件:contenttype 組件的做用:能夠經過兩個字段讓表和N張表建立FK關係 13. FBV和CBV是什麼?以及優缺點。 (在本質上都是同樣的,經過函數處理請求) CBV在指定的類上面加上裝飾器或在此方法上面添加裝飾器 @method_decorator,並繼承view CBV更適合作接口,響應各類method 14.django rest framework a.權限 -寫一個類並註冊到權限類,在類的has_permission方法中編寫權限邏輯 -True -False b.認證 -寫一個類並註冊到認證類。在類的authticate方法中編寫認證邏輯。 -認證成功(user,auth)元組 -raise AuthticateFaild(...) -None(匿名用戶) c.訪問頻率限制 -寫一個類並註冊到頻率類,在類的allow_request/wait方法中編寫pinlv邏輯 -True -False 若是返回False,執行wait d.序列化 -對queryset序列化以及對請求數據格式效驗 e.路由 -能夠經過as_view傳參數,根據請求方式不一樣執行相應的方法 -能夠在url中設置一個結尾,相似於:.json f.視圖 -幫助開發者提供了一些類,並在類中提供了多個方法供咱們使用 g.分頁 -對從數據庫中獲取到的數據進行分頁處理: SQL-> limit offset -1.限制頁數 -2.記錄當前頁最大ID、最小ID -3種分頁: -根據頁碼:http://www.baidu.com/api/v1/student/?page=1&size=10 -根據索引:http://www.baidu.com/api/v1/student/?offset=1&limit=10 遊標位置 -根據加密:http://www.baidu.com/api/v1/student/?page=erd8 h.解析器 -根據ContentType請求頭解析出queryset和對象 i.渲染器 -根據url中傳入的後綴,決定將數據如何渲染到頁面上 j.版本 -在url中設置version參數,用戶請求時傳入參數。在request.version中獲取,根據版本不一樣作不一樣操做 14. restful規範 a.根據method的不一樣,進行不一樣操做(GET/POST/PUT/DELETE/PATCH) b.面向資源編程(任何url都是一個資源,能夠對資源進行增刪改查) c.體現版本(bootstrap3,bootstrap4) d.體現是API https://luffycity.com/api/v1/salary https://api.luffycity.com/v2/salary(放前面會出現2次跨域請求) e.使用https(基於安全考慮) f.響應時設置狀態碼(200,300,400,500) g.條件 https://luffycity.com/api/v1/salary?page=1&size=10 (url限制) h.返回值 1.https://luffycity.com/api/v1/salary GET:[返回列表] POST:[返回新增的數據] 2.https://luffycity.com/api/v1/salary/1/ GET:獲取單條數據 PUT:更新 PATCH:局部更新 DELETE:刪除 i.返回錯誤信息{code:100001,error:"xx錯誤"} j.Hypermedia API(返回結果中提供連接) ret={code:1000,data:{id:1,name:"小強",depart_id:http://www.baidu.com}} 15. django rest framework的做用? 快速搭建基於restful規範的接口。 16. django怎麼弄併發的 nginx的併發能力超高,單臺併發能力過萬(這個也不是絕對),在純靜態的web服務中更是突出其優越的地方, 因爲其底層使用epoll異步IO模型進行處理,使其深受歡迎 17. Django的Form主要具備如下功能? 生成HTMl標籤,驗證用戶數據 is_vaild,HTML Form提交保留上次提交數據,初始化頁面顯示內容 18. Django、Tornado、Flask各自的優點 Django:Django無socket,django的目的是簡便,快速開發,並遵循MVC設計,多個組件能夠很方便的以「插件」形式服務於整個框架, django有許多功能強大的第三方插件。django具備很強的可擴展性。 Tornado:它是非阻塞式服務器,並且速度至關快,得力於其非阻塞的方式和對epoll的運用,Future對象,缺點:沒有session,須要自定製 Flask:是一個微型的web框架,配合SQLALchemy來使用,jinja2模板,werkzeug接口,另外它的上下文則較爲耀眼 19. django的template的註釋是什麼樣子的 單行:{#註釋#} 多行註釋:{%comment%} 20. 什麼是wsgi? -web服務網關接口,實現該協議的模塊(socket) -wsgiref(性能最差) -werkzurg -uwsig Nginx 21. uwsgi和wsgi wsgi:是web服務器網關接口,是pyhton應用程序或框架和web服務器之間的一種接口,其普遍使用的是django框架。 uwsgi:是一個web服務器,它實現了wsgi協議,Nginx中HttpUwsgiModule的做用是與Uwsgi服務器進行交換 22. 常見的狀態碼: - 200 服務器成功返回網頁 - 204 請求收到,但返回信息爲空 - 301/302 重定向/和永久重定向 - 304 客戶端已經執行了GET,但文件未變化 - 400 錯誤請求,如語法錯誤 - 403/404 無權限訪問/找不到網頁 - 500 服務器產生內部錯誤 23. 視圖常見的繼承 from rest_framework.views import APIView # * 重寫須要 from rest_framework.generics import GenericAPIView from rest_framework.viewsets import GenericViewSet # as_view from rest_framework.viewsets import ModelViewSet # * 基本增刪改查 24. 你寫的類都繼承過哪兒些類? object View Views.APIView, GenericViewSet ViewSetMixin, GenericAPIView mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin,
25. csrf存在的緣由 - 緣由1: - 須要瀏覽器+爬蟲先訪問登陸頁面,獲取token,而後再攜帶token去訪問。 - 緣由2: - 兩個tab打開的同時,其中一個tab誘導你對另一個tab提交非法數據