多對多關(guān)聯(lián)的表,如何手動生成第三張表?
tags = models.ManyToManyField(
? to="Tag",
? through='Article2Tag',
? through_fields=('article', 'tag'),
在Django中,服務(wù)端給客戶端響應(yīng)信息有幾種方式?分別是什么?
- HTTPresponse,
- jsonresponse,
- redirect
web框架的本質(zhì)是什么?
是一個socket服務(wù)端,用戶的瀏覽器其實就是一個socket客戶端
django中csrf的實現(xiàn)機(jī)制
- django第一次響應(yīng)來自某個客戶端的請求時,后端隨機(jī)產(chǎn)生一個token值,把這個token保存在SESSION狀態(tài)中;同時,后端把這個token放到cookie中交給前端頁面;
- 下次前端需要發(fā)起請求(比如發(fā)帖)的時候把這個token值加入到請求數(shù)據(jù)或者頭信息中,一起傳給后端;Cookies:{csrftoken:xxxxx}
- 后端校驗前端請求帶過來的token和SESSION里的token是否一致;
Django App的目錄結(jié)構(gòu)

什么是Cookie、如何獲取、設(shè)置Cookie
Cookie是由服務(wù)器創(chuàng)建,然后通過響應(yīng)發(fā)送給客戶端保存的一個鍵值對。
response.set_cookie("is_login",True)
request.COOKIES.get("is_login")
什么是session,與cookie的對比、設(shè)置、獲取、清空session
Session是服務(wù)器端技術(shù),利用這個技術(shù),服務(wù)器在運行時可以 為每一個用戶的瀏覽器創(chuàng)建一個其獨享的session對象,由于 session為用戶瀏覽器獨享,所以用戶在訪問服務(wù)器的web資源時 ,可以把各自的數(shù)據(jù)放在各自的session中,當(dāng)用戶再去訪問該服務(wù)器中的其它web資源時,其它web資源再從用戶各自的session中 取出數(shù)據(jù)為用戶服務(wù)。
request.session["is_login"] = True
is_login = request.session.get("is_login")
request.session.flush()
如何防范CSRF
- 啟用中間件
- post請求
- 驗證碼
- 表單中添加{%csrf_token%}標(biāo)簽
get請求和post請求的區(qū)別
- GET提交的數(shù)據(jù)會放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,如EditBook?name=test1&id=123456
- POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中
- GET提交的數(shù)據(jù)大小有限制(因為瀏覽器對URL的長度有限制)
- POST方法提交的數(shù)據(jù)沒有限制
- GET與POST請求在服務(wù)端獲取請求數(shù)據(jù)方式不同
- GET方式提交數(shù)據(jù),會帶來安全問題,比如一個登錄頁面,通過GET方式提交數(shù)據(jù)時,用戶名和密碼將出現(xiàn)在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機(jī)器,就可以從歷史記錄獲得該用戶的賬號和密碼
什么是wsgi
wsgi的全稱是Web Server Gateway Interface(Web服務(wù)器網(wǎng)關(guān)接口),它不是服務(wù)器、python模塊、框架、API或者任何軟件,只是一種描述web服務(wù)器(如nginx,uWSGI等服務(wù)器)如何與web應(yīng)用程序(如用Django、Flask框架寫的程序)通信的規(guī)范。
使用哪個庫可以對字符串進(jìn)行加密
hashlib
blank和null的區(qū)別是什么
- null 是針對數(shù)據(jù)庫而言,如果 null=True, 表示數(shù)據(jù)庫的該字段可以為空。NULL represents non-existent data.
- blank 是針對表單的,如果 blank=True,表示你的表單填寫該字段的時候可以不填。比如 admin 界面下增加 model 一條記錄的時候。直觀的看到就是該字段不是粗體
QueryDict和dict區(qū)別
QueryDict類似字典的自定義類,用來處理單鍵對應(yīng)多值的情況。
在 HttpRequest 對象中,屬性 GET 和 POST 得到的都是 django.http.QueryDict 所創(chuàng)建的實例。這是一個 django 自定義的類似字典的類,用來處理同一個鍵帶多個值的情況
什么是restful規(guī)范?
restful是一種軟件架構(gòu)風(fēng)格或者說是一種設(shè)計風(fēng)格,并不是標(biāo)準(zhǔn),它只是提供了一組設(shè)計的原則和約束條件,主要用于客戶端和服務(wù)器交互類的軟件。
像設(shè)計模式一樣,并不是一定要遵循這些原則,而是基于這個風(fēng)格設(shè)計的軟件可以更簡潔,更#有層次,我們可以根據(jù)開發(fā)的實際情況,做相應(yīng)的改變。
它里面提到了一些規(guī)范,例如:
- restful 提倡面向資源編程,在url接口中盡量要使用名詞,不要使用動詞
- 在url接口中推薦使用Https協(xié)議,讓網(wǎng)絡(luò)接口更加安全
- 在url中可以體現(xiàn)版本號
Django本身提供了runserver為什么不能用來部署?
runserver方法是調(diào)試Django時經(jīng)常用到的運行方式,它使用Django自帶的 WSGI?Server運行,主要在測試和開發(fā)中使用,并且?runserver?開啟的方式也是單進(jìn)程
Django重定向如何實現(xiàn)?狀態(tài)碼是什么?
- 使用HttpResponseRedirect
- 狀態(tài)碼:302,301
Django中如何加載初始化數(shù)據(jù)
Django在創(chuàng)建對象時在調(diào)用save()方法,之后,ORM框架會把對象的屬性轉(zhuǎn)換為寫入到數(shù)據(jù)庫中,實現(xiàn)對數(shù)據(jù)庫的初始化;通過操作對象,查詢數(shù)據(jù)庫,將查詢集返回給視圖函數(shù),通過模板語言展現(xiàn)在前端頁面
- end -