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(): 從返回結果中剔除重復紀錄