Python全棧的知識點(4)

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提交非法數據
相關文章
相關標籤/搜索