07-12 django 56-60


56.簡述django中間件及其應用場景?

.process_request : 請求進來時,權限認證
.process_view : 路由匹配之后,能夠得到視圖函數
.process_exception : 異常時執行
.process_template_responseprocess : 模板渲染時執行
.process_response : 請求有響應時執行

57.簡述 django FBV 和 CBV?

FBV和CBV本質是一樣的,基於函數的視圖叫做FBV,基於類的視圖叫做CBV
在python中使用CBV的優點:

  • .提高了代碼的復用性,可以使用面向對象的技術,比如Mixin(多繼承)
  • .可以用不同的函數針對不同的HTTP方法處理,而不是通過很多if判斷,提高代碼可讀性

58.如何給 django 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):
                ...
        3、給類加:
            @method_decorator(check_login, name="get")
            @method_decorator(check_login, name="post")
            class HomeView(View):
                ... 

59.django 如何連接多個數據庫並實現讀寫分離?

在配置文件中增加slave數據庫的配置

在Django的配置文件settings.py中,DATABASES中添加代碼如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 主服務器的運行ip
        'PORT': 3306,   # 主服務器的運行port
        'USER': 'django',  # 主服務器的用戶名
        'PASSWORD': 'django',  # 主服務器的密碼
        'NAME': 'djangobase'   #  數據表名
    },
    'slave': {
        'ENGINE': 'django.db.backends.mysql', 
        'HOST': '127.0.0.1',
        'PORT': 8306,
        'USER': 'django_slave',
        'PASSWORD': 'django_slave',
        'NAME': 'djangobase_slave'
    }
}  

創建數據庫操作的路由分類

在項目的utils中創建db_router.py文件,並在該文件中定義一個db類,用來進行讀寫分離

class MasterSlaveDBRouter(object):
    """數據庫主從讀寫分離路由"""
 
    def db_for_read(self, model, **hints):
        """讀數據庫"""
        return "slave"
 
    def db_for_write(self, model, **hints):
        """寫數據庫"""
        return "default"
 
    def allow_relation(self, obj1, obj2, **hints):
        """是否運行關聯操作"""
        return True  

配置讀寫分離路由

在配置文件中增加:

#配置讀寫分離
DATABASE_ROUTERS = ['項目名.utils.db_router."自定義的類名稱"']

60.列舉 django orm 中你了解的所有方法?

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM