07-12 django 56-60

______egon新书python全套来袭请看:https://egonlin.com/book.html

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():            从返回结果中剔除重复纪录
posted @ 2019-10-23 21:30  小猿取经-林海峰老师  阅读(627)  评论(0编辑  收藏  举报