面試題1:9月25日面試題

Poke發表於2020-09-27

目錄

1.簡述HTTP協議

2.請求頭都包含哪些東西?

3.常用狀態碼都有哪些?

4.django請求生命週期?

5.如何自定義中介軟體

6.django怎麼執行原生sql語句

7.什麼是CBV和FBV?

8.什麼是MTV框架、MVC框架?

9.csrf攻擊原理

10.ORM常用方法

11.簡述cookie和session

12.django建立專案的命令是什麼?

13.ORM如何批量建立資料?

14.中介軟體的作用場景

1.HTTP協議

'''
HTTP協議:超文字傳輸協議
是一個基於應用層的協議
現如今使用最廣泛的版本是HTTP 1.1
它是客戶端和服務端請求和應答的標準

HTTP請求響應過程:
客戶端傳送一個請求報文
伺服器解析請求,並向客戶端傳送響應報文
客戶端瀏覽器解析HTML內容

'''

2.請求頭都包含哪些東西?

'''
頭部欄位名:值 + 回車符 + 換行符
頭部欄位名:值 + 回車符 + 換行符
頭部欄位名:值 + 回車符 + 換行符
'''

3.常用狀態碼都有哪些?

'''
200 請求成功 
404 網頁不存在
500 內部伺服器錯誤
403 Forbidden 拒絕執行請求
'''

4.django請求生命週期

'''
瀏覽器輸入了url到wsgi wsgi中封裝了socket
之後走中介軟體 url控制器 檢視函式
檢視函式進行ORM操作就可以運算元據庫
檢視函式通過render模板渲染就可以到Template
模板渲染後 可以返回到檢視函式 
再通過中介軟體 通過wsgi返回給瀏覽器
這樣瀏覽器就可以看到頁面了...
'''

5.如何自定義中介軟體

'''
1.先在應用下建立一個資料夾,比如起名mymiddleware
2.在middleware資料夾下建立一個py檔案,比如叫auth.py
3.在auth.py中
    先引入一個MiddlewareMixin類
    定義一個類,該類繼承MiddlewareMixin類
    在裡面可以定義中介軟體的5個方法
'''

6.django怎麼執行原生sql語句

'''
1.在django裡面,可以用raw()方法執行原生sql語句
models.Book.object.all(select name from book)

2.從django提供的介面 像使用pymysql模組一樣運算元據庫
遊標cursor-->execute-->fetchone
'''

7.什麼是CBV和FBV?

'''
CBV和FBV都是針對於檢視函式的
CBV:在檢視裡使用類處理請求
FBV:在檢視裡使用函式處理請求
'''

8.什麼是MTV框架、MVC框架?

'''
MVC:將web應用分為模型M 控制器C 和 檢視V三層
模型 負責業務和資料庫的對映
檢視 負責和使用者的互動頁面
控制器接受模型和檢視完成使用者的請求

MTV:django中的
M:Model 負責業務和資料的對映 ORM
T:Template 負責如何把頁面展示給使用者 html
V:View 負責業務邏輯,並在適當時候呼叫Model和Template
還有一個url分發器 負責將不同URL分發給不同的view處理
view再呼叫Model和Template
'''

9.csrf攻擊原理

'''
csrf:跨站請求偽造

csrf跨站請求偽造校驗
        網站在給使用者返回一個具有提交資料的頁面的時候會給這個頁面加一個唯一標識
        當這個頁面朝後端傳送post請求的時候,後端會先校驗唯一標識
            如果唯一標識不對,直接拒絕(403 forbidden)
            如果成功則正常執行
兩個網站請求兩個頁面,兩個網站分別返回兩個頁面,兩個頁面長的一模一樣
當頁面提交post請求的時候

**:網站在返回頁面的時候,給每個頁面都攜帶了一個隨機標識過去的
    兩個網站請求兩個頁面 
        客戶端向服務端傳送請求 
        服務端返回頁面給客戶端,在返回頁面的時候是帶了一個隨機標記過去的
            比如說正常網站請求頁面,網站返回一個頁面,並攜帶隨機標識33333
            釣魚網站請求頁面,網站返回一個頁面,並攜帶隨機標識44444(因為標識唯一,所以兩個標識絕對不相同)
        客戶端(瀏覽器)有input框,輸入資料提交,這個時候客戶端向服務端傳送POST請求
        服務端會驗證你發過來的post請求裡,有沒有唯一標記33333
        而釣魚網址他的唯一標識,是釣魚網址的服務端給它發的44444
        而當正常網址/釣魚網址提交post請求時,服務端會驗證你的唯一標識是否是他之前給客戶端的那個
            如果唯一標識正確,就可以向後臺提交資料
            如果唯一標識錯誤,就會把它forbidden 403掉,不能向後臺提交資料


'''

10.ORM常用方法

'''
all() 獲取表中所有資料 結果為queryset型別
filter() 獲取部分資料 結果為queryset型別
get() 獲取單條資料,結果為model物件
first()queryset資料型別呼叫 返回第一條資料
values() 獲取記錄的某些欄位資料
'''

11.簡述cookie和session

# cookie
'''
cookie出現的原因:HTTP無狀態,每次請求都是獨立的,伺服器不知道客戶端是什麼狀態
cookie原理:
    1.瀏覽器訪問服務端,帶著一個空的cookie
    2.然後由伺服器產生cookie,瀏覽器收到響應後儲存在本地
    3.瀏覽器再次訪問時,就會自動帶上cookie,伺服器就可以通過cookie來判斷來訪問的是誰了
'''

# session
'''
session出現的原因:
    1.cookie是明文儲存的
    2.cookie的大小限制為4kb
    
session原理:
    1.使用者登入後生成一個字典{Key:Value},key是由服務端生成的cookie,value是一個自定義格式的字典,比如{islogin:True}
    2.往字典裡儲存資訊:比如存使用者是否登入:{islogin:True}
    3.當我們在django中使用session時,cookie由服務端隨機生成,寫到瀏覽器的cookie中
    4.每個瀏覽器都有自己的cookie值,是session尋找使用者資訊的唯一標識
    5.request.session <==> 1中key對應的value

session好處:
    cookie儲存在瀏覽器,session儲存在客戶端
'''

12.django建立專案的命令是什麼?

# django_admin startproject django_orm

13.ORM如何批量建立資料?

# models.Book.objects.bulk_create(obj_list) 

14.中介軟體的作用場景

'''
圖書管理系統
不登入不可以檢視所有書籍 以及新增修改和刪除等操作
所以定義中介軟體 在請求之前設定中介軟體 
判斷登入狀態 如果登入了 就可以檢視介面進行操作
沒有登入 就不能看到頁面進行任何操作
'''

相關文章