1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Django面試常見(jiàn)的一些問(wèn)題

      這篇文章主要介紹Django面試常見(jiàn)的一些問(wèn)題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

      創(chuàng)新互聯(lián)建站主要從事網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)旺蒼,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575

      下面總結(jié)一下Django面試常見(jiàn)的一些問(wèn)題

      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)于要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。

      3.Django的賣點(diǎn)是超高的開發(fā)效率,其性能擴(kuò)展有限;采用Django的項(xiàng)目,在流量達(dá)到一定規(guī)模后,都需要對(duì)其進(jìn)行重構(gòu),才能滿足性能的要求。

      4.Django適用的是中小型的網(wǎng)站,或者是作為大型網(wǎng)站快速實(shí)現(xiàn)產(chǎn)品雛形的工具。

      5.Django模板的設(shè)計(jì)哲學(xué)是徹底的將代碼、樣式分離; Django從根本上杜絕在模板中進(jìn)行編碼、處理數(shù)據(jù)的可能。

      2.WSGI 和 uWSGI在django中的作用

      WSGI

      WSGI是一種WEB服務(wù)器  ==網(wǎng)關(guān)接口==。 是一個(gè)Web服務(wù)器(如nginx)與應(yīng)用服務(wù)器(如uWSGI)通信的一種規(guī)范(協(xié)議)。

      在生產(chǎn)環(huán)境中使用WSGI作為python web的服務(wù)器。Python Web服務(wù)器網(wǎng)關(guān)接口,是Python應(yīng)用程序或框架和Web服務(wù)器之間的一種接口,被廣泛接受。WSGI沒(méi)有官方的實(shí)現(xiàn), 因?yàn)閃SGI更像一個(gè)協(xié)議,只要遵照這些協(xié)議,WSGI應(yīng)用(Application)都可以在任何服務(wù)器(Server)上運(yùn)行。

      uWSGI

      uWSGI實(shí)現(xiàn)了WSGI的所有接口,是一個(gè)快速、自我修復(fù)、開發(fā)人員和系統(tǒng)管理員友好的服務(wù)器。uWSGI代碼完全用C編寫,效率高、性能穩(wěn)定。

      uwsgi是一種線路協(xié)議而不是通信協(xié)議,在此常用于在uWSGI服務(wù)器與其他網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)通信。uwsgi協(xié)議是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型。

      作用

      Django 是一個(gè) Web 框架,框架的作用在于處理 request 和 reponse,其他的不是框架所關(guān)心的內(nèi)容。所以怎么部署 Django 不是 Django 所需要關(guān)心的。

      Django 所提供的是一個(gè)開發(fā)服務(wù)器,這個(gè)開發(fā)服務(wù)器,沒(méi)有經(jīng)過(guò)安全測(cè)試,而且使用的是 Python 自帶的 simple HTTPServer 創(chuàng)建的,在安全性和效率上都是不行的

      而uWSGI 是一個(gè)全功能的 HTTP 服務(wù)器,他要做的就是把 HTTP 協(xié)議轉(zhuǎn)化成語(yǔ)言支持的網(wǎng)絡(luò)協(xié)議。比如把 HTTP 協(xié)議轉(zhuǎn)化成 WSGI 協(xié)議,讓 Python 可以直接使用。

      uwsgi 是一種 uWSGI 的內(nèi)部協(xié)議,使用二進(jìn)制方式和其他應(yīng)用程序進(jìn)行通信。

      3.什么是wsgi?

      WSGI是Python在處理HTTP請(qǐng)求時(shí),規(guī)定的一種處理方式。如一個(gè)HTTP Request過(guò)來(lái)了,那么就有一個(gè)相應(yīng)的處理函數(shù)來(lái)進(jìn)行處理和返回結(jié)果。WSGI就是規(guī)定這個(gè)處理函數(shù)的參數(shù)長(zhǎng)啥樣的,它的返回結(jié)果是長(zhǎng)啥樣的?至于該處理函數(shù)的名子和處理邏輯是啥樣的,那無(wú)所謂。簡(jiǎn)單而言,WSGI就是規(guī)定了處理函數(shù)的輸入和輸出格式。

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

      當(dāng)用戶在瀏覽器中輸入url時(shí),瀏覽器會(huì)生成請(qǐng)求頭和請(qǐng)求體發(fā)給服務(wù)端

      請(qǐng)求頭和請(qǐng)求體中會(huì)包含瀏覽器的動(dòng)作(action),這個(gè)動(dòng)作通常為get或者post,體現(xiàn)在url之中.

      url經(jīng)過(guò)Django中的wsgi,再經(jīng)過(guò)Django的中間件,最后url到過(guò)路由映射表,在路由中一條一條進(jìn)行匹配,

      一旦其中一條匹配成功就執(zhí)行對(duì)應(yīng)的視圖函數(shù),后面的路由就不再繼續(xù)匹配了.

      視圖函數(shù)根據(jù)客戶端的請(qǐng)求查詢相應(yīng)的數(shù)據(jù).返回給Django,然后Django把客戶端想要的數(shù)據(jù)做為一個(gè)字符串返回給客戶端.

      客戶端瀏覽器接收到返回的數(shù)據(jù),經(jīng)過(guò)渲染后顯示給用戶.

      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.列舉django的內(nèi)置組件?

      Admin是對(duì)model中對(duì)應(yīng)的數(shù)據(jù)表進(jìn)行增刪改查提供的組件

      model組件:負(fù)責(zé)操作數(shù)據(jù)庫(kù)

      form組件:1.生成HTML代碼2.數(shù)據(jù)有效性校驗(yàn)3校驗(yàn)信息返回并展示

      ModelForm組件即用于數(shù)據(jù)庫(kù)操作,也可用于用戶請(qǐng)求的驗(yàn)證

      6.列舉django中間件的5個(gè)方法?以及django中間件的應(yīng)用場(chǎng)景?

      process_request : 請(qǐng)求進(jìn)來(lái)時(shí),權(quán)限認(rèn)證

      process_view : 路由匹配之后,能夠得到視圖函數(shù)

      process_exception : 異常時(shí)執(zhí)行

      process_template_responseprocess : 模板渲染時(shí)執(zhí)行

      process_response : 請(qǐng)求有響應(yīng)時(shí)執(zhí)行

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

      FBV和CBV本質(zhì)是一樣的,基于函數(shù)的視圖叫做FBV,基于類的視圖叫做CBV

      在python中使用CBV的優(yōu)點(diǎn):

      提高了代碼的復(fù)用性,可以使用面向?qū)ο蟮募夹g(shù),比如Mixin(多繼承)

      可以用不同的函數(shù)針對(duì)不同的HTTP方法處理,而不是通過(guò)很多if判斷,提高代碼可讀性

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

      class WSGIHandler(base.BaseHandler):

      -------request = self.request_class(environ)

      請(qǐng)求走到WSGIHandler類的時(shí)候,執(zhí)行cell方法,將environ封裝成了request

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

      from django.utils.decorators import method_decorator
              1、給方法加:
                  @method_decorator(check_login)
                  def post(self, request):
                      ...
              2、給dispatch加:
                  @method_decorator(check_login)
                  def dispatch(self, request, *args, **kwargs):
                      ...

      給類加:

      @method_decorator(check_login, name="get")
                  @method_decorator(check_login, name="post")
                  class HomeView(View):
                      ...

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

      <1> all():                  查詢所有結(jié)果 
        <2> filter(**kwargs):       它包含了與所給篩選條件相匹配的對(duì)象。獲取不到返回None
        <3> get(**kwargs):          返回與所給篩選條件相匹配的對(duì)象,返回結(jié)果有且只有一個(gè)。
                                    如果符合篩選條件的對(duì)象超過(guò)一個(gè)或者沒(méi)有都會(huì)拋出錯(cuò)誤。
        <4> exclude(**kwargs):      它包含了與所給篩選條件不匹配的對(duì)象
        <5> order_by(*field):       對(duì)查詢結(jié)果排序
        <6> reverse():              對(duì)查詢結(jié)果反向排序 
        <8> count():                返回?cái)?shù)據(jù)庫(kù)中匹配查詢(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ì)錄

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

      前提:有外鍵存在時(shí),可以很好的減少數(shù)據(jù)庫(kù)請(qǐng)求的次數(shù),提高性能

      select_related通過(guò)多表join關(guān)聯(lián)查詢,一次性獲得所有數(shù)據(jù),只執(zhí)行一次SQL查詢

      prefetch_related分別查詢每個(gè)表,然后根據(jù)它們之間的關(guān)系進(jìn)行處理,執(zhí)行兩次查詢

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

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

      13.列舉django orm中三種能寫sql語(yǔ)句的方法

      1.使用execute執(zhí)行自定義的SQL

       直接執(zhí)行SQL語(yǔ)句(類似于pyMySQL的用法)
              # 更高靈活度的方式執(zhí)行原生SQL語(yǔ)句
              from django.db import connection
              cursor = connection.cursor()
              cursor.execute("SELECT DATE_FORMAT(create_time, '%Y-%m') FROM blog_article;")
              ret = cursor.fetchall()
              print(ret)

      2.使用extra方法 :queryset.extra(select={"key": "原生的SQL語(yǔ)句"})

      3.使用raw方法

      執(zhí)行原始sql并返回模型

      依賴model多用于查詢

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

      values : queryset類型的列表中是字典
      values_list : queryset類型的列表中是元組

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

      cookie:

      cookie是保存在瀏覽器端的鍵值對(duì),可以用來(lái)做用戶認(rèn)證

      session:

      將用戶的會(huì)話信息保存在服務(wù)端,key值是隨機(jī)產(chǎn)生的字符串,value值是session的內(nèi)容

      依賴于cookie將每個(gè)用戶的隨機(jī)字符串保存到用戶瀏覽器上

      Django中session默認(rèn)保存在數(shù)據(jù)庫(kù)中:django_session表

      flask,session默認(rèn)將加密的數(shù)據(jù)寫在用戶的cookie中

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

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

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

      1.重寫構(gòu)造函數(shù)

      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ì)象

      authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())//多選

      18.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í)候,必須要寫on_delete參數(shù),否則會(huì)報(bào)異常

      19.django的模板中自定義filter和simple_tag的區(qū)別?

      自定義filter:{{ 參數(shù)1|filter函數(shù)名:參數(shù)2 }}

      1.可以與if標(biāo)簽來(lái)連用

      2.自定義時(shí)需要寫兩個(gè)形參

        例子:自定義filter
                  1. 在app01下創(chuàng)建一個(gè)叫templatetags的Python包
                  2. 在templatetags的文件夾下創(chuàng)建py文件  myfilters
                  3. 在py文件中寫代碼
                      from django import template
                      register = template.Library()
                      
                      @register.filter
                      def add_sb(value,arg='aaa'):
                          return "{}_sb_{}".formart(value,arg)             
                      @register.filter(name='sb')
                      def add_sb(value,arg='aaa'):
                          return "{}_sb_{}".formart(value,arg)     
                  4. 使用自定義filter
                      {% load myfilters %}
                      {{ name|add_sb:'xxx'}}
                      {{ name|sb:'xxx'}}
      simple_tag:{% simple_tag函數(shù)名 參數(shù)1 參數(shù)2 %}

      1.可以傳多個(gè)參數(shù),沒(méi)有限制

      2.不能與if標(biāo)簽來(lái)連用

      例子:自定義simpletag

      創(chuàng)建

      1 、在app01中創(chuàng)建一個(gè)名字是templatetags的包,
              2、在包中創(chuàng)建一個(gè)py文件
              3、在py文件中導(dǎo)入
                    from django import template
                    register = template.Library()
              4、寫函數(shù)
                    @register.simple_tag(name="plus")
                    def plus(a,b,c):
                        return '{}+{}+{}'.format(a,b,c)
              5、加裝飾器@register.simple_tag(name="plus")

      使用

      1、導(dǎo)入

                  {% load mytag %}

      2、使用

                 {% plus 1 2 3 %}

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

      第一步:django第一次響應(yīng)來(lái)自某個(gè)客戶端的請(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是否一致。

      21.基于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")}

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

      1.runserver方法是調(diào)試 Django 時(shí)經(jīng)常用到的運(yùn)行方式,它使用Django自帶的

      WSGI Server 運(yùn)行,主要在測(cè)試和開發(fā)中使用,并且 runserver 開啟的方式也是單進(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ū)⒂脩粼L問(wèn)請(qǐng)求與應(yīng)用 app 隔離開,實(shí)現(xiàn)真正的部署 。相比來(lái)講,支持的并發(fā)量更高,方便管理多進(jìn)程,發(fā)揮多核的優(yōu)勢(shì),提升性能。

      23.Django如何實(shí)現(xiàn)websocket?

      django實(shí)現(xiàn)websocket官方推薦大家使用channels。channels通過(guò)升級(jí)http協(xié)議 升級(jí)到websocket協(xié)議。

      以上是“Django面試常見(jiàn)的一些問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


      網(wǎng)站標(biāo)題:Django面試常見(jiàn)的一些問(wèn)題
      本文鏈接:http://ef60e0e.cn/article/jpehgd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        大丰市| 安国市| 馆陶县| 天等县| 泾川县| 柘荣县| 晋州市| 绥棱县| 平利县| 鄂托克旗| 庐江县| 舞阳县| 长春市| 阜宁县| 仁怀市| 琼海市| 武鸣县| 庆安县| 延寿县| 尉犁县| 大石桥市| 台中县| 五莲县| 九龙城区| 乌审旗| 武夷山市| 稷山县| 巴中市| 武定县| 喜德县| 延庆县| 双柏县| 达州市| 西安市| 碌曲县| 内丘县| 大安市| 三台县| 茌平县| 呼和浩特市| 白沙|