亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

由面試題加深對(duì)Django的認(rèn)識(shí)理解

 更新時(shí)間:2019年07月19日 09:37:50   作者:蟲(chóng)洞小鰻魚(yú)  
這篇文章主要介紹了由面試題加深對(duì)Django的認(rèn)識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1. 對(duì)Django的認(rèn)識(shí)?

#1.Django是走大而全的方向,它最出名的是其全自動(dòng)化的管理后臺(tái):只需要使用起ORM,做簡(jiǎn)單的對(duì)象定義,它就能自動(dòng)生成數(shù)據(jù)庫(kù)結(jié)構(gòu)、以及全功能的管理后臺(tái)。
#2.Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度高。
#應(yīng)用程序必須使用Django內(nèi)置的ORM,否則就不能享受到框架內(nèi)提供的種種基于其ORM的便利;
#理論上可以切換掉其ORM模塊,但這就相當(dāng)于要把裝修完畢的房子拆除重新裝修,倒不如一開(kāi)始就去毛胚房做全新的裝修。
#3.Django的賣(mài)點(diǎn)是超高的開(kāi)發(fā)效率,其性能擴(kuò)展有限;采用Django的項(xiàng)目,在流量達(dá)到一定規(guī)模后,都需要對(duì)其進(jìn)行重構(gòu),才能滿(mǎn)足性能的要求。
#4.Django適用的是中小型的網(wǎng)站,或者是作為大型網(wǎng)站快速實(shí)現(xiàn)產(chǎn)品雛形的工具。
#5.Django模板的設(shè)計(jì)哲學(xué)是徹底的將代碼、樣式分離; Django從根本上杜絕在模板中進(jìn)行編碼、處理數(shù)據(jù)的可能。

2. Django 、Flask、Tornado的對(duì)比

#1.Django走的是大而全的方向,開(kāi)發(fā)效率高。它的MTV框架,自帶的ORM,admin后臺(tái)管理,自帶的sqlite數(shù)據(jù)庫(kù)和開(kāi)發(fā)測(cè)試用的服務(wù)器
#給開(kāi)發(fā)者提高了超高的開(kāi)發(fā)效率
#2.Flask是輕量級(jí)的框架,自由,靈活,可擴(kuò)展性很強(qiáng),核心基于Werkzeug WSGI工具和jinja2模板引擎
#3.Tornado走的是少而精的方向,性能優(yōu)越。它最出名的是異步非阻塞的設(shè)計(jì)方式
#Tornado的兩大核心模塊:
# 1.iostraem:對(duì)非阻塞式的socket進(jìn)行簡(jiǎn)單的封裝
# 2.ioloop:對(duì)I/O多路復(fù)用的封裝,它實(shí)現(xiàn)了一個(gè)單例

3. 什么是wsgi,uwsgi,uWSGI?

#WSGI:
# web服務(wù)器網(wǎng)關(guān)接口,是一套協(xié)議。用于接收用戶(hù)請(qǐng)求并將請(qǐng)求進(jìn)行初次封裝,然后將請(qǐng)求交給web框架
# 實(shí)現(xiàn)wsgi協(xié)議的模塊:
# 1.wsgiref,本質(zhì)上就是編寫(xiě)一個(gè)socket服務(wù)端,用于接收用戶(hù)請(qǐng)求(django)
# 2.werkzeug,本質(zhì)上就是編寫(xiě)一個(gè)socket服務(wù)端,用于接收用戶(hù)請(qǐng)求(flask)
#uwsgi:
# 與WSGI一樣是一種通信協(xié)議,它是uWSGI服務(wù)器的獨(dú)占協(xié)議,用于定義傳輸信息的類(lèi)型
#uWSGI:
# 是一個(gè)web服務(wù)器,實(shí)現(xiàn)了WSGI協(xié)議,uWSGI協(xié)議,http協(xié)議,

4. django請(qǐng)求的生命周期?

#1.wsgi,請(qǐng)求封裝后交給web框架 (Flask、Django) 
#2.中間件,對(duì)請(qǐng)求進(jìn)行校驗(yàn)或在請(qǐng)求對(duì)象中添加其他相關(guān)數(shù)據(jù),例如:csrf、request.session - 
#3.路由匹配 根據(jù)瀏覽器發(fā)送的不同url去匹配不同的視圖函數(shù) 
#4.視圖函數(shù),在視圖函數(shù)中進(jìn)行業(yè)務(wù)邏輯的處理,可能涉及到:orm、templates => 渲染 - 
#5.中間件,對(duì)響應(yīng)的數(shù)據(jù)進(jìn)行處理。 
#6.wsgi,將響應(yīng)的內(nèi)容發(fā)送給瀏覽器。

5. 簡(jiǎn)述什么是FBV和CBV?

#FBV和CBV本質(zhì)是一樣的
#基于函數(shù)的視圖叫做FBV,基于類(lèi)的視圖叫做CBV
#在python中使用CBV的優(yōu)點(diǎn):
#1.提高了代碼的復(fù)用性,可以使用面向?qū)ο蟮募夹g(shù),比如Mixin(多繼承)
#2.可以用不同的函數(shù)針對(duì)不同的HTTP方法處理,而不是通過(guò)很多if判斷,提高代碼可讀性

6. 如何給CBV的程序添加裝飾器?

#引入method_decorator模塊
#1.直接在類(lèi)上加裝飾器
#@method_decorator(test,name='dispatch')
#class Loginview(View):
# pass
#2.直接在處理的函數(shù)前加裝飾器
#@method_decorator(test)
# def post(self,request,*args,**kwargs):pass

7. 簡(jiǎn)述MVC和MTV

#MVC軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)
#Model:負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)的映射(ORM)
#View:負(fù)責(zé)與用戶(hù)的交互
#Control:接受用戶(hù)的輸入調(diào)用模型和視圖完成用戶(hù)的請(qǐng)求
#Django框架的MTV設(shè)計(jì)模式借鑒了MVC框架的思想,三部分為:Model、Template和View
#Model(模型):負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)的對(duì)象(ORM)
#Template(模版):負(fù)責(zé)如何把頁(yè)面展示給用戶(hù)
#View(視圖):負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r(shí)候調(diào)用Model和Template
#此外,Django還有一個(gè)urls分發(fā)器,
#它將一個(gè)個(gè)URL的頁(yè)面請(qǐng)求分發(fā)給不同的view處理,view再調(diào)用相應(yīng)的Model和Template

8. django路由系統(tǒng)中name的作用?

#用于反向解析路由,相當(dāng)于給url取個(gè)別名,只要這個(gè)名字不變,即使對(duì)應(yīng)的url改變
#通過(guò)該名字也能找到該條url

9. 列舉django的內(nèi)置組件?

#1.Admin是對(duì)model中對(duì)應(yīng)的數(shù)據(jù)表進(jìn)行增刪改查提供的組件
#2.model組件:負(fù)責(zé)操作數(shù)據(jù)庫(kù)
#3.form組件:1.生成HTML代碼2.數(shù)據(jù)有效性校驗(yàn)3校驗(yàn)信息返回并展示
#4.ModelForm組件即用于數(shù)據(jù)庫(kù)操作,也可用于用戶(hù)請(qǐng)求的驗(yàn)證

10. 說(shuō)一下Django,MIDDLEWARES中間件的作用和應(yīng)用場(chǎng)景?

#中間件是介于request與response處理之間的一道處理過(guò)程,用于在全局范圍內(nèi)改變Django的輸入和輸出。
#簡(jiǎn)單的來(lái)說(shuō)中間件是幫助我們?cè)谝晥D函數(shù)執(zhí)行之前和執(zhí)行之后都可以做一些額外的操作
#例如:
#1.Django項(xiàng)目中默認(rèn)啟用了csrf保護(hù),每次請(qǐng)求時(shí)通過(guò)CSRF中間件檢查請(qǐng)求中是否有正確#token值
#2.當(dāng)用戶(hù)在頁(yè)面上發(fā)送請(qǐng)求時(shí),通過(guò)自定義的認(rèn)證中間件,判斷用戶(hù)是否已經(jīng)登陸,未登陸就去登陸。
#3.當(dāng)有用戶(hù)請(qǐng)求過(guò)來(lái)時(shí),判斷用戶(hù)是否在白名單或者在黑名單里

11. 列舉django中間件的5個(gè)方法?

#1.process_request : 請(qǐng)求進(jìn)來(lái)時(shí),權(quán)限認(rèn)證
#2.process_view : 路由匹配之后,能夠得到視圖函數(shù)
#3.process_exception : 異常時(shí)執(zhí)行
#4.process_template_responseprocess : 模板渲染時(shí)執(zhí)行
#5.process_response : 請(qǐng)求有響應(yīng)時(shí)執(zhí)行

12. django的request對(duì)象是在什么時(shí)候創(chuàng)建的?

#class WSGIHandler(base.BaseHandler):
# request = self.request_class(environ)
#請(qǐng)求走到WSGIHandler類(lèi)的時(shí)候,執(zhí)行__cell__方法,將environ封裝成了request

13. Django重定向是如何實(shí)現(xiàn)的?用的什么狀態(tài)碼?

#1.使用HttpResponseRedirect
#from django.http import HttpResponseRedirect 
#2.使用redirect和reverse
#狀態(tài)碼:301和302
#301和302的區(qū)別:
#相同點(diǎn):都表示重定向,瀏覽器在拿到服務(wù)器返回的這個(gè)狀態(tài)碼后會(huì)自動(dòng)跳轉(zhuǎn)到一個(gè)新的URL地址
#不同點(diǎn):
#301比較常用的場(chǎng)景是使用域名跳轉(zhuǎn)。比如,我們?cè)L問(wèn) http://www.baidu.com 會(huì)跳轉(zhuǎn)到 https://www.baidu.com
#表示舊地址A的資源已經(jīng)被永久地移除了
#302用來(lái)做臨時(shí)跳轉(zhuǎn),比如未登陸的用戶(hù)訪(fǎng)問(wèn)用戶(hù)中心重定向到登錄頁(yè)面。表示舊地址A的資源還在(仍然可以訪(fǎng)問(wèn)),這個(gè)重定向只是臨時(shí)地從舊地址A跳轉(zhuǎn)到地址B

14. xxss攻擊

#-- XSS攻擊是向網(wǎng)頁(yè)中注入惡意腳本,用在用戶(hù)瀏覽網(wǎng)頁(yè)時(shí),在用戶(hù)瀏覽器中執(zhí)行惡意腳本的攻擊。
# -- XSS分類(lèi),反射型xss ,存儲(chǔ)型xss
# -- 反射型xss又稱(chēng)為非持久型xss,攻擊者通過(guò)電子郵件等方式將包含注入腳本的鏈接發(fā)送給受害者,
# 受害者通過(guò)點(diǎn)擊鏈接,執(zhí)行注入腳本,達(dá)到攻擊目的。
# -- 持久型xss跟反射型的最大不同是攻擊腳本將被永久的存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫(kù)和文件中,多見(jiàn)于論壇
# 攻擊腳本連同正常信息一同注入到帖子內(nèi)容當(dāng)中,當(dāng)瀏覽這個(gè)被注入惡意腳本的帖子的時(shí)候,惡意腳本會(huì)被執(zhí)行
# -- 防范措施 1 輸入過(guò)濾 2 輸出編碼 3 cookie防盜
# 1,輸入過(guò)濾 用戶(hù)輸入進(jìn)行檢測(cè) 不允許帶有js代碼
# 2,輸出編碼 就是把我們的腳本代碼變成字符串形式輸出出來(lái)
# 3,cookie加密
 
 
 
#向頁(yè)面注入惡意的代碼,這些代碼被瀏覽器執(zhí)行
#XSS攻擊能做些什么:
# 1.竊取cookies
# 2.讀取用戶(hù)未公開(kāi)的資料,如果:郵件列表或者內(nèi)容、系統(tǒng)的客戶(hù)資料,聯(lián)系人列表
#解決方法:
# 1.客戶(hù)度端:表單提交之前或者url傳遞之前,對(duì)需要的參數(shù)進(jìn)行過(guò)濾
# 2.服務(wù)器端:檢查用戶(hù)輸入的內(nèi)容是否有非法內(nèi)容

15. django中csrf的實(shí)現(xiàn)機(jī)制

#第一步:django第一次響應(yīng)來(lái)自某個(gè)客戶(hù)端的請(qǐng)求時(shí),后端隨機(jī)產(chǎn)生一個(gè)token值,把這個(gè)token保存在SESSION狀態(tài)中;同時(shí),后端把這個(gè)token放到cookie中交給前端頁(yè)面;
#第二步:下次前端需要發(fā)起請(qǐng)求(比如發(fā)帖)的時(shí)候把這個(gè)token值加入到請(qǐng)求數(shù)據(jù)或者頭信息中,一起傳給后端;Cookies:{csrftoken:xxxxx}
#第三步:后端校驗(yàn)前端請(qǐng)求帶過(guò)來(lái)的token和SESSION里的token是否一致;

16. 基于django使用ajax發(fā)送post請(qǐng)求時(shí),都可以使用哪種方法攜帶csrf token?

#1.后端將csrftoken傳到前端,發(fā)送post請(qǐng)求時(shí)攜帶這個(gè)值發(fā)送
data: {
 csrfmiddlewaretoken: '{{ csrf_token }}'
 },
#2.獲取form中隱藏標(biāo)簽的csrftoken值,加入到請(qǐng)求數(shù)據(jù)中傳給后端
 data: {
 csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
 },
#3.cookie中存在csrftoken,將csrftoken值放到請(qǐng)求頭中
headers:{ "X-CSRFtoken":$.cookie("csrftoken")},

17. Django本身提供了runserver,為什么不能用來(lái)部署?(runserver與uWSGI的區(qū)別)

#1.runserver方法是調(diào)試 Django 時(shí)經(jīng)常用到的運(yùn)行方式,它使用Django自帶的
#WSGI Server 運(yùn)行,主要在測(cè)試和開(kāi)發(fā)中使用,并且 runserver 開(kāi)啟的方式也是單進(jìn)程 。
#2.uWSGI是一個(gè)Web服務(wù)器,它實(shí)現(xiàn)了WSGI協(xié)議、uwsgi、http 等協(xié)議。注意uwsgi是一種通信協(xié)議,而uWSGI是實(shí)現(xiàn)uwsgi協(xié)議和WSGI協(xié)議的 Web 服務(wù)器。
#uWSGI具有超快的性能、低內(nèi)存占用和多app管理等優(yōu)點(diǎn),并且搭配著Nginx就是一個(gè)生產(chǎn)環(huán)境了,能夠?qū)⒂脩?hù)訪(fǎng)問(wèn)請(qǐng)求與應(yīng)用 app 隔離開(kāi),實(shí)現(xiàn)真正的部署 。
#相比來(lái)講,支持的并發(fā)量更高,方便管理多進(jìn)程,發(fā)揮多核的優(yōu)勢(shì),提升性能。

18. cookie和session的區(qū)別:

#1.cookie:
# cookie是保存在瀏覽器端的鍵值對(duì),可以用來(lái)做用戶(hù)認(rèn)證
#2.session:
# 將用戶(hù)的會(huì)話(huà)信息保存在服務(wù)端,key值是隨機(jī)產(chǎn)生的自符串,value值時(shí)session的內(nèi)容
# 依賴(lài)于cookie將每個(gè)用戶(hù)的隨機(jī)字符串保存到用戶(hù)瀏覽器上
#Django中session默認(rèn)保存在數(shù)據(jù)庫(kù)中:django_session表
#flask,session默認(rèn)將加密的數(shù)據(jù)寫(xiě)在用戶(hù)的cookie中

19. 列舉django orm 中所有的方法(QuerySet對(duì)象的所有方法)

#<1> all():  查詢(xún)所有結(jié)果 
#<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對(duì)象。獲取不到返回None
#<3> get(**kwargs): 返回與所給篩選條件相匹配的對(duì)象,返回結(jié)果有且只有一個(gè)。獲取不到會(huì)抱胸
#如果符合篩選條件的對(duì)象超過(guò)一個(gè)或者沒(méi)有都會(huì)拋出錯(cuò)誤。
#<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對(duì)象
#<5> order_by(*field): 對(duì)查詢(xún)結(jié)果排序
#<6> reverse(): 對(duì)查詢(xún)結(jié)果反向排序 
#<8> count(): 返回?cái)?shù)據(jù)庫(kù)中匹配查詢(xún)(QuerySet)的對(duì)象數(shù)量。 
#<9> first(): 返回第一條記錄 
#<10> last(): 返回最后一條記錄 
#<11> exists(): 如果QuerySet包含數(shù)據(jù),就返回True,否則返回False
#<12> values(*field): 返回一個(gè)ValueQuerySet——一個(gè)特殊的QuerySet,運(yùn)行后得到的并不是一系 model的實(shí)例化對(duì)象,而是一個(gè)可迭代的字典序列
#<13> values_list(*field): 它與values()非常相似,它返回的是一個(gè)元組序列,values返回的是一個(gè)字典序列
#<14> distinct(): 從返回結(jié)果中剔除重復(fù)紀(jì)錄

20. only和defer的區(qū)別?

#only:從數(shù)據(jù)庫(kù)中只取指定字段的內(nèi)容
#defer:指定字段的內(nèi)容不被檢索

21. select_related和prefetch_related的區(qū)別?

#有外鍵存在時(shí),可以很好的減少數(shù)據(jù)庫(kù)請(qǐng)求的次數(shù),提高性能
#select_related通過(guò)多表join關(guān)聯(lián)查詢(xún),一次性獲得所有數(shù)據(jù),只執(zhí)行一次SQL查詢(xún)
#prefetch_related分別查詢(xún)每個(gè)表,然后根據(jù)它們之間的關(guān)系進(jìn)行處理,執(zhí)行兩次查詢(xún)

22. filter和exclude的區(qū)別?

#取到的值都是QuerySet對(duì)象,filter選擇滿(mǎn)足條件的,exclude:排除滿(mǎn)足條件的.

23. F和Q的作用?

#F:對(duì)數(shù)據(jù)本身的不同字段進(jìn)行操作 如:比較和更新
#Q:用于構(gòu)造復(fù)雜的查詢(xún)條件 如:& |操作

24. values和values_list的區(qū)別?

#values : 取字典的queryset
#values_list : 取元組的queryset

25. 如何使用django orm批量創(chuàng)建數(shù)據(jù)?

#bulk_create()
#objs=[models.Book(title="圖書(shū){}".format(i+15)) for i in range(100)]
#models.Book.objects.bulk_create(objs)

26. django的Form和ModeForm的作用?

#Form作用:

# 1.在前端生成HTML代碼
# 2.對(duì)數(shù)據(jù)作有效性校驗(yàn)
# 3.返回校驗(yàn)信息并展示
#ModeForm:根據(jù)模型類(lèi)生成From組件,并且可以操作數(shù)據(jù)庫(kù)

27. django的Form組件中,如果字段中包含choices參數(shù),請(qǐng)使用兩種方式實(shí)現(xiàn)數(shù)據(jù)源實(shí)時(shí)更新。

#1.重寫(xiě)構(gòu)造函數(shù)
def def __init__(self, *args, **kwargs):
 super().__init__(*args, **kwargs)
 self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
#2.利用ModelChoiceField字段,參數(shù)為queryset對(duì)象

28. django的Model中的ForeignKey字段中的on_delete參數(shù)有什么作用?

#刪除關(guān)聯(lián)表中的數(shù)據(jù)時(shí),當(dāng)前表與其關(guān)聯(lián)的field的操作
#django2.0之后,表與表之間關(guān)聯(lián)的時(shí)候,必須要寫(xiě)on_delete參數(shù),否則會(huì)報(bào)異常

29. django如何實(shí)現(xiàn)websocket?

# 列舉django orm中三種能寫(xiě)sql語(yǔ)句的方法。

#1.使用execute執(zhí)行自定義的SQL
#2.使用extra方法 
#3.使用raw方法
# 1.執(zhí)行原始sql并返回模型
# 2.依賴(lài)model多用于查詢(xún)

30. django orm 中如何設(shè)置讀寫(xiě)分離?

#1.手動(dòng)讀寫(xiě)分離:通過(guò).using(db_name)來(lái)指定要使用的數(shù)據(jù)庫(kù)
#2.自動(dòng)讀寫(xiě)分離:
# 1.定義類(lèi):如Router
# 2.配置Router
# settings.py中指定DATABASE_ROUTERS
# DATABASE_ROUTERS = ['myrouter.Router',] 
#提高讀的性能:多配置幾個(gè)數(shù)據(jù)庫(kù),并在讀取時(shí),隨機(jī)選取。寫(xiě)的時(shí)候?qū)懙街鲙?kù)
#實(shí)現(xiàn)app之間的數(shù)據(jù)庫(kù)分離:分庫(kù)分表

31. django中如何實(shí)現(xiàn)orm表中添加數(shù)據(jù)時(shí)創(chuàng)建一條日志記錄。

32. django內(nèi)置的緩存機(jī)制?

# 全站緩存
MIDDLEWARE_CLASSES = (
 ‘django.middleware.cache.UpdateCacheMiddleware', #第一
 'django.middleware.common.CommonMiddleware',
 ‘django.middleware.cache.FetchFromCacheMiddleware', #最后
)
 
# 視圖緩存
from django.views.decorators.cache import cache_page
import time
 
@cache_page(15)  #超時(shí)時(shí)間為15秒
def index(request):
 t=time.time() #獲取當(dāng)前時(shí)間
 return render(request,"index.html",locals())
 
# 模板緩存
{% load cache %}
 <h3 style="color: green">不緩存:-----{{ t }}</h3>
 
{% cache 2 'name' %} # 存的key
 <h3>緩存:-----:{{ t }}</h3>
{% endcache %}

33. django的緩存能使用redis嗎?如果可以的話(huà),如何配置?

#1.安裝 pip install django-redis
#2.在stting中配置CACHES,可以設(shè)置多個(gè)緩存,根據(jù)名字使用
 CACHES = {
  "default": {
  "BACKEND": "django_redis.cache.RedisCache",
  "LOCATION": "redis://127.0.0.1:6379",
  "OPTIONS": {
   "CLIENT_CLASS": "django_redis.client.DefaultClient",
   "CONNECTION_POOL_KWARGS": {"max_connections": 100}
   # "PASSWORD": "密碼",
  }
  }
 },
 #另添加緩存
 "JERD": { }
#3.根據(jù)名字去連接池中獲取連接
 from django_redis import get_redis_connection
 conn = get_redis_connection("default")

34. django的模板中filter和simple_tag的區(qū)別?

# 自定義filter:{{ 參數(shù)1|filter函數(shù)名:參數(shù)2 }}
# 1.可以與if標(biāo)簽來(lái)連用
# 2.自定義時(shí)需要寫(xiě)兩個(gè)形參
# simple_tag:{% simple_tag函數(shù)名 參數(shù)1 參數(shù)2 %}
# 1.可以傳多個(gè)參數(shù),沒(méi)有限制
# 2.不能與if標(biāo)簽來(lái)連用

35. django-debug-toolbar的作用?

#1.是django的第三方工具包,給django擴(kuò)展了調(diào)試功能
#包括查看sql語(yǔ)句,db查詢(xún)次數(shù),request,headers等

36. django中如何實(shí)現(xiàn)單元測(cè)試?

37. 解釋orm中 db first 和 code first的含義?

#數(shù)據(jù)持久化的方式:
#db first基于已存在的數(shù)據(jù)庫(kù),生成模型
#code first基于已存在的模型,生成數(shù)據(jù)庫(kù)庫(kù)

38. django中如何根據(jù)數(shù)據(jù)庫(kù)表生成model中的類(lèi)?

#1.在settings中設(shè)置要連接的數(shù)據(jù)庫(kù)
#2.生成model模型文件
#python manage.py inspectdb
#3.模型文件導(dǎo)入到models中
# python manage.py inspectdb > app/models.py

39. 使用orm和原生sql的優(yōu)缺點(diǎn)?

#1.orm的開(kāi)發(fā)速度快,操作簡(jiǎn)單。使開(kāi)發(fā)更加對(duì)象化
#執(zhí)行速度慢。處理多表聯(lián)查等復(fù)雜操作時(shí),ORM的語(yǔ)法會(huì)變得復(fù)雜
#2.sql開(kāi)發(fā)速度慢,執(zhí)行速度快。性能強(qiáng)

40. django的contenttype組件的作用?

#這個(gè)組件保存了項(xiàng)目中所有app和model的對(duì)應(yīng)關(guān)系,每當(dāng)我們創(chuàng)建了新的model并執(zhí)行數(shù)據(jù)庫(kù)遷移后,ContentType表中就會(huì)自動(dòng)新增一條記錄
#當(dāng)一張表和多個(gè)表FK關(guān)聯(lián),并且多個(gè)FK中只能選擇其中一個(gè)或其中n個(gè)時(shí),可以利用contenttypes

41. 談?wù)勀銓?duì)restful規(guī)范的認(rèn)識(shí)?

#首先restful是一種軟件架構(gòu)風(fēng)格或者說(shuō)是一種設(shè)計(jì)風(fēng)格,并不是標(biāo)準(zhǔn),它只是提供了一組設(shè)計(jì)#原則和約束條件,主要用于客戶(hù)端和服務(wù)器交互類(lèi)的軟件。 
#就像設(shè)計(jì)模式一樣,并不是一定要遵循這些原則,而是基于這個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡(jiǎn)潔,更#有層次,我們可以根據(jù)開(kāi)發(fā)的實(shí)際情況,做相應(yīng)的改變。
#它里面提到了一些規(guī)范,例如:
#1.restful 提倡面向資源編程,在url接口中盡量要使用名詞,不要使用動(dòng)詞  
#2、在url接口中推薦使用Https協(xié)議,讓網(wǎng)絡(luò)接口更加安全
#https://www.bootcss.com/v1/mycss?page=3
#(Https是Http的安全版,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,
#因此加密的詳細(xì)內(nèi)容就需要SSL(安全套接層協(xié)議))    
#3、在url中可以體現(xiàn)版本號(hào)
#https://v1.bootcss.com/mycss
#不同的版本可以有不同的接口,使其更加簡(jiǎn)潔,清晰  
#4、url中可以體現(xiàn)是否是API接口 
#https://www.bootcss.com/api/mycss  
#5、url中可以添加條件去篩選匹配
#https://www.bootcss.com/v1/mycss?page=3  
#6、可以根據(jù)Http不同的method,進(jìn)行不同的資源操作
#(5種方法:GET / POST / PUT / DELETE / PATCH)  
#7、響應(yīng)式應(yīng)該設(shè)置狀態(tài)碼
#8、有返回值,而且格式為統(tǒng)一的json格式  
#9、返回錯(cuò)誤信息
#返回值攜帶錯(cuò)誤信息  
#10、返回結(jié)果中要提供幫助鏈接,即API最好做到Hypermedia
#如果遇到需要跳轉(zhuǎn)的情況 攜帶調(diào)轉(zhuǎn)接口的URL
   ret = {
  code: 1000,
  data:{
  id:1,
  name:'小強(qiáng)',
  depart_id:http://www.luffycity.com/api/v1/depart/8/
  }
 }

42. 接口的冪等性是什么意思?

#1.是系統(tǒng)的接口對(duì)外一種承諾(而不是實(shí)現(xiàn))
#2.承諾只要調(diào)用接口成功,外部多次調(diào)用對(duì)系統(tǒng)的影響都是一致的,不會(huì)對(duì)資源重復(fù)操作

43. 什么是RPC?

#遠(yuǎn)程過(guò)程調(diào)用 (RPC) 是一種協(xié)議,程序可使用這種協(xié)議向網(wǎng)絡(luò)中的另一臺(tái)計(jì)算機(jī)上的程序請(qǐng)求服務(wù)
#1.RPC采用客戶(hù)機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶(hù)機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。
#2.首先,客戶(hù)機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。
#2.在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,
#3.最后,客戶(hù)端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

44. 為什么要使用API

#系統(tǒng)之間為了調(diào)用數(shù)據(jù)。
#數(shù)據(jù)傳輸格式:
# 1.json
# 2.xml 

45. 為什么要使用django rest framework框架?

#能自動(dòng)生成符合 RESTful 規(guī)范的 API
#1.在開(kāi)發(fā)REST API的視圖中,雖然每個(gè)視圖具體操作的數(shù)據(jù)不同,
#但增、刪、改、查的實(shí)現(xiàn)流程基本一樣,這部分的代碼可以簡(jiǎn)寫(xiě)
#2.在序列化與反序列化時(shí),雖然操作的數(shù)據(jù)不同,但是執(zhí)行的過(guò)程卻相似,這部分的代碼也可以簡(jiǎn)寫(xiě)
#REST framework可以幫助簡(jiǎn)化上述兩部分的代碼編寫(xiě),大大提高REST API的開(kāi)發(fā)速度

46. django rest framework框架中都有那些組件?

#1.序列化組件:serializers 對(duì)queryset序列化以及對(duì)請(qǐng)求數(shù)據(jù)格式校驗(yàn)
#2.路由組件routers 進(jìn)行路由分發(fā)
#3.視圖組件ModelViewSet 幫助開(kāi)發(fā)者提供了一些類(lèi),并在類(lèi)中提供了多個(gè)方法
#4.認(rèn)證組件 寫(xiě)一個(gè)類(lèi)并注冊(cè)到認(rèn)證類(lèi)(authentication_classes),在類(lèi)的的authticate方法中編寫(xiě)認(rèn)證邏
#5.權(quán)限組件 寫(xiě)一個(gè)類(lèi)并注冊(cè)到權(quán)限類(lèi)(permission_classes),在類(lèi)的的has_permission方法中編寫(xiě)認(rèn)證邏輯。 
#6.頻率限制 寫(xiě)一個(gè)類(lèi)并注冊(cè)到頻率類(lèi)(throttle_classes),在類(lèi)的的allow_request/wait 方法中編寫(xiě)認(rèn)證邏輯
#7.解析器 選擇對(duì)數(shù)據(jù)解析的類(lèi),在解析器類(lèi)中注冊(cè)(parser_classes)
#8.渲染器 定義數(shù)據(jù)如何渲染到到頁(yè)面上,在渲染器類(lèi)中注冊(cè)(renderer_classes)
#9.分頁(yè) 對(duì)獲取到的數(shù)據(jù)進(jìn)行分頁(yè)處理, pagination_class
#10.版本 版本控制用來(lái)在不同的客戶(hù)端使用不同的行為
#在url中設(shè)置version參數(shù),用戶(hù)請(qǐng)求時(shí)候傳入?yún)?shù)。在request.version中獲取版本,根據(jù)版本不同 做不同處理

47. django rest framework框架中的視圖都可以繼承哪些類(lèi)?

#class View(object):
#class APIView(View): 封裝了view,并且重新封裝了request,初始化了各種組件
#class GenericAPIView(views.APIView):
#1.增加了一些屬性和方法,如get_queryset,get_serializer
#class GenericViewSet(ViewSetMixin, generics.GenericAPIView)
#父類(lèi)ViewSetMixin 重寫(xiě)了as_view,返回return csrf_exempt(view)
#并重新設(shè)置請(qǐng)求方式與執(zhí)行函數(shù)的關(guān)系
#class ModelViewSet(mixins.CreateModelMixin,
#   mixins.RetrieveModelMixin,
#   mixins.UpdateModelMixin,
#   mixins.DestroyModelMixin,
#   mixins.ListModelMixin,
#   GenericViewSet):pass
#繼承了mixins下的一些類(lèi),封裝了list,create,update等方法
#和GenericViewSet

48. 簡(jiǎn)述 django rest framework框架的認(rèn)證流程

#1.用戶(hù)請(qǐng)求走進(jìn)來(lái)后,走APIView,初始化了默認(rèn)的認(rèn)證方法
#2.走到APIView的dispatch方法,initial方法調(diào)用了request.user
#3.如果我們配置了認(rèn)證類(lèi),走我們自己認(rèn)證類(lèi)中的authentication方法

49. django rest framework如何實(shí)現(xiàn)的用戶(hù)訪(fǎng)問(wèn)頻率控制

#使用IP/用戶(hù)賬號(hào)作為鍵,每次的訪(fǎng)問(wèn)時(shí)間戳作為值,構(gòu)造一個(gè)字典形式的數(shù)據(jù),存起來(lái),每次訪(fǎng)問(wèn)時(shí)對(duì)時(shí)間戳列表的元素進(jìn)行判斷,
#把超時(shí)的刪掉,再計(jì)算列表剩余的元素?cái)?shù)就能做到頻率限制了 
#匿名用戶(hù):使用IP控制,但是無(wú)法完全控制,因?yàn)橛脩?hù)可以換代理IP登錄用戶(hù):使用賬號(hào)控制,但是如果有很多賬號(hào),也無(wú)法限制

50. rest_framework序列化組件的作用,以及一些外鍵關(guān)系的鉤子方法

#作用:幫助我們序列化數(shù)據(jù)
#1.choices get_字段名_display
#2.ForeignKey source=orm 操作
#3.ManyToManyFiled SerializerMethodField()
#   def get_字段名():
#   return 自定義

51. 給用戶(hù)提供一個(gè)接口之前需要提前做什么

#1.跟前端進(jìn)行和交互,確定前端要什么
#2.把需求寫(xiě)個(gè)文檔保存

52. PV和UV

#1.pv:頁(yè)面訪(fǎng)問(wèn)量,沒(méi)打開(kāi)一次頁(yè)面PV計(jì)算+1,頁(yè)面刷新也是
#2.UV:獨(dú)立訪(fǎng)問(wèn)數(shù),一臺(tái)電腦終端為一個(gè)訪(fǎng)客

53. 什么是跨域以及解決方法:

#跨域:
# 瀏覽器從一個(gè)域名的網(wǎng)頁(yè)去請(qǐng)求另一個(gè)域名的資源時(shí),瀏覽器處于安全的考慮,不允許不同源的請(qǐng)求
#同源策略:
# 協(xié)議相同
# 域名相同
# 端口相同
#處理方法:
# 1.通過(guò)JSONP跨域
# JSON是一種數(shù)據(jù)交換格式
# JSONP是一種非官方的跨域數(shù)據(jù)交互協(xié)議
# jsonp是包含在函數(shù)調(diào)用中的json
# script標(biāo)簽不受同源策略的影響,手動(dòng)創(chuàng)建一個(gè)script標(biāo)簽,傳遞URL,同時(shí)傳入一個(gè)回調(diào)函數(shù)的名字
# 服務(wù)器得到名字后,返回?cái)?shù)據(jù)時(shí)會(huì)用這個(gè)函數(shù)名來(lái)包裹住數(shù)據(jù),客戶(hù)端獲取到數(shù)據(jù)之后,立即把script標(biāo)簽刪掉
# 2.cors:跨域資源共享
# 使用自定義的HTTP頭部允許瀏覽器和服務(wù)器相互通信
# 1.如果是簡(jiǎn)單請(qǐng)求,直接設(shè)置允許訪(fǎng)問(wèn)的域名:
# 允許你的域名來(lái)獲取我的數(shù)據(jù)    
# response['Access-Control-Allow-Origin'] = "*"
# 2.如果是復(fù)雜請(qǐng)求,首先會(huì)發(fā)送options請(qǐng)求做預(yù)檢,然后再發(fā)送真正的PUT/POST....請(qǐng)求
# 因此如果復(fù)雜請(qǐng)求是PUT等請(qǐng)求,則服務(wù)端需要設(shè)置允許某請(qǐng)求
# 如果復(fù)雜請(qǐng)求設(shè)置了請(qǐng)求頭,則服務(wù)端需要設(shè)置允許某請(qǐng)求頭
#簡(jiǎn)單請(qǐng)求:
# 一次請(qǐng)求 
#非簡(jiǎn)單請(qǐng)求:
# 兩次請(qǐng)求,在發(fā)送數(shù)據(jù)之前會(huì)先發(fā)一次請(qǐng)求用于做“預(yù)檢”,
# 只有“預(yù)檢”通過(guò)后才再發(fā)送一次請(qǐng)求用于數(shù)據(jù)傳輸。

#只要同時(shí)滿(mǎn)足以下兩大條件,就屬于簡(jiǎn)單請(qǐng)求。    
# (1) 請(qǐng)求方法是以下三種方法之一:HEAD GET POST
# (2)HTTP的頭信息不超出以下幾種字段:     
# Accept     
# Accept-Language     
# Content-Language
# Last-Event-ID
# Content-Type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data、 text/plain 
#JSONP和CORS:
# 1.JSONP只能實(shí)現(xiàn)GET請(qǐng)求,而CORS支持所有類(lèi)型的HTTP請(qǐng)求
# 2.jsonp需要client和server端的相互配合
# 3.cors在client端無(wú)需設(shè)置,server端需要針對(duì)不同的請(qǐng)求,來(lái)做head頭的處理

54. 如何實(shí)現(xiàn)用戶(hù)的登陸認(rèn)證

#1.cookie session
#2.token 登陸成功后生成加密字符串
#3.JWT:json wed token縮寫(xiě) 它將用戶(hù)信息加密到token中,服務(wù)器不保存任何用戶(hù)信息
#服務(wù)器通過(guò)使用保存的密鑰來(lái)驗(yàn)證token的正確性

55. 如何將dict轉(zhuǎn)換成url的格式:

#使用urlencode
#from urllib.parse import urlencode
#post_data={"k1":"v1","k2":"v2"}
#ret=urlencode(post_data)
#print(ret,type(ret)) #k1=v1&k2=v2 <class 'str'>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python搶購(gòu)腳本的編寫(xiě)方法

    Python搶購(gòu)腳本的編寫(xiě)方法

    本文給大家分享一個(gè)秒殺搶購(gòu)腳本,幫助大家雙十二搶購(gòu)心愛(ài)的禮物,步驟很簡(jiǎn)單,下面小編給大家分享基于Python搶購(gòu)腳本的編寫(xiě)方法,感興趣的朋友一起看看吧
    2021-11-11
  • Python使用當(dāng)前時(shí)間、隨機(jī)數(shù)產(chǎn)生一個(gè)唯一數(shù)字的方法

    Python使用當(dāng)前時(shí)間、隨機(jī)數(shù)產(chǎn)生一個(gè)唯一數(shù)字的方法

    這篇文章主要介紹了Python使用當(dāng)前時(shí)間、隨機(jī)數(shù)產(chǎn)生一個(gè)唯一數(shù)字的方法,涉及Python時(shí)間與隨機(jī)數(shù)相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python matplotlib繪圖詳解

    Python matplotlib繪圖詳解

    這篇文章主要介紹了Python matplotlib繪圖的方法詳解,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10
  • python暢玩os模塊以及順便批量修改圖片尺寸

    python暢玩os模塊以及順便批量修改圖片尺寸

    這篇文章主要介紹了python暢玩os模塊以及順便批量修改圖片尺寸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python3常用的數(shù)據(jù)清洗方法(小結(jié))

    python3常用的數(shù)據(jù)清洗方法(小結(jié))

    這篇文章主要介紹了python3常用的數(shù)據(jù)清洗方法(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python實(shí)現(xiàn)代碼統(tǒng)計(jì)工具(終極篇)

    Python實(shí)現(xiàn)代碼統(tǒng)計(jì)工具(終極篇)

    這篇文章主要介紹了Python實(shí)現(xiàn)代碼統(tǒng)計(jì)工具的相關(guān)資料,供大家參考,感興趣的小伙伴們可以參考一下
    2016-07-07
  • python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)

    python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)

    這篇文章主要介紹了python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼示例,指定文件編碼、目錄或擴(kuò)展名即可進(jìn)行轉(zhuǎn)換,大家參考使用吧
    2014-01-01
  • Python?運(yùn)行?shell?命令的方法匯總

    Python?運(yùn)行?shell?命令的方法匯總

    這篇文章主要介紹了Python運(yùn)行shell命令的一些方法,我們來(lái)看一下 python 中有哪些自帶模塊或者方法可以實(shí)現(xiàn),對(duì)Python運(yùn)行shell命令感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • mvc框架打造筆記之wsgi協(xié)議的優(yōu)缺點(diǎn)以及接口實(shí)現(xiàn)

    mvc框架打造筆記之wsgi協(xié)議的優(yōu)缺點(diǎn)以及接口實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于mvc框架打造筆記之wsgi協(xié)議的優(yōu)缺點(diǎn)以及接口實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 詳解Python如何生成詞云的方法

    詳解Python如何生成詞云的方法

    這篇文章主要介紹了詳解Python如何生成詞云的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論