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

目錄

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.中間件的作用場景

'''
圖書管理系統
不登錄不可以查看所有書籍 以及添加修改和刪除等操作
所以定義中間件 在請求之前設置中間件 
判斷登錄狀態 如果登錄了 就可以查看介面進行操作
沒有登錄 就不能看到頁面進行任何操作
'''