附錄6.習(xí)題3

多對多關(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ī)制

  1. django第一次響應(yīng)來自某個客戶端的請求時,后端隨機(jī)產(chǎn)生一個token值,把這個token保存在SESSION狀態(tài)中;同時,后端把這個token放到cookie中交給前端頁面;
  2. 下次前端需要發(fā)起請求(比如發(fā)帖)的時候把這個token值加入到請求數(shù)據(jù)或者頭信息中,一起傳給后端;Cookies:{csrftoken:xxxxx}
  3. 后端校驗前端請求帶過來的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ī)范,例如:

  1. restful 提倡面向資源編程,在url接口中盡量要使用名詞,不要使用動詞
  2. 在url接口中推薦使用Https協(xié)議,讓網(wǎng)絡(luò)接口更加安全
  3. 在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 -

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容