Python全棧的知識點(4)
阿新 • • 發佈:2018-10-21
定向 options flask ins app ref 裝飾器 幫助 還需
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提交非法數據
Python全棧的知識點(4)