• django中 debug-toolbar插件 crm项目补充


    django中使用debug-toolbar插件

    环境安装:

    pip install debug-toolbar

    在django中的settings中配置以下数据

    注册debug-toolbar

    中间件中加入

    如果是本机测试,需要将127.0.0.1加入到 INTERNAL_IPS

     

    配置jqery中的url

    如果在国内无法使用,可以在settings中配置以下,

    如果在Django项目中使用了jquery的话就可以直接将这一项置为空,那么django-debug-toolbar 就会使用你项目中用到的jquery:

     

     配置完成之后,启动django项目可以看到以下内容就是debug-toolbar启动成功

     缓存

      - 开发调试
      - 内存
      - 文件
      - 数据库
      - Memcache缓存(python-memcached模块)
      - Memcache缓存(pylibmc模块)

    django-redis

    中文文档:https://django-redis-chs.readthedocs.io/zh_CN/latest/

    作为 cache backend

    在django的settings中配置以下数据

    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }

    将 django-redis 作为 session 储存

    settings中配置

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "default"

    信号

      Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。

    Django内置信号:

    Model signals
        pre_init                    # django的model执行其构造方法前,自动触发
        post_init                   # django的model执行其构造方法后,自动触发
        pre_save                    # django的model对象保存前,自动触发
        post_save                   # django的model对象保存后,自动触发
        pre_delete                  # django的model对象删除前,自动触发
        post_delete                 # django的model对象删除后,自动触发
        m2m_changed                 # django的model中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
        class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
    Management signals
        pre_migrate                 # 执行migrate命令前,自动触发
        post_migrate                # 执行migrate命令后,自动触发
    Request/response signals
        request_started             # 请求到来前,自动触发
        request_finished            # 请求结束后,自动触发
        got_request_exception       # 请求异常后,自动触发
    Test signals
        setting_changed             # 使用test测试修改配置文件时,自动触发
        template_rendered           # 使用test测试渲染模板时,自动触发
    Database Wrappers
        connection_created          # 创建数据库连接时,自动触发

    对于Django内置的信号,仅需注册指定信号,当程序执行相应操作时,自动触发注册函数:

    注册信号,写入与project同名的文件夹下的_init_.py文件中,也是换数据库引擎的地方。

        from django.core.signals import request_finished
        from django.core.signals import request_started
        from django.core.signals import got_request_exception
    
        from django.db.models.signals import class_prepared
        from django.db.models.signals import pre_init, post_init
        from django.db.models.signals import pre_save, post_save
        from django.db.models.signals import pre_delete, post_delete
        from django.db.models.signals import m2m_changed
        from django.db.models.signals import pre_migrate, post_migrate
    
        from django.test.signals import setting_changed
        from django.test.signals import template_rendered
    
        from django.db.backends.signals import connection_created
    
    
        def callback(sender, **kwargs):
            print("xxoo_callback")
            print(sender,kwargs)
    
        xxoo.connect(callback)
        # xxoo指上述导入的内容

    实例用法:

    def my_callback(sender,**kwargs):
        print('我是嘻嘻嘻的兄弟.')
    
    
    #方法一:
    from django.core.signals import request_finished
    
    request_finished.connect(my_callback)
    
    # 方法二:
    from django.core.signals import request_finished
    from django.dispatch import receiver
    
    @receiver(request_finished)
    def my_callback(sender, **kwargs):
        print("Request finished!")

      新增数据的数据的时候写一条日志

    如何提升orm性能

    1.能用values()就用values()
    
    2.select_related  连表查询  #适用于一对一,一对多,就是普通的连表查询
    
    3.prefetch_related 子查询  #适用于多对多,可以理解成先对一张表的数据进行查找,然后在将这个查询结果作为下一次的查询条件
     
    4.only(‘字段’) defer('字段')  only是只显示写的字段 , defer是排除写的字段 

    如何使用多个数据库

    DATABASES = {
    
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        },
        'db2': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
        },
    
    }


    对指定的数据库迁移 :
      python manage.py migrate --database db2

    如何实现读写分离:
      手动:
        obj=models.Student.objects.using('db2').get('pk=1') #读
        models.Student.objects.using('default').create(pk=2,name='喜羊羊')

        obj.save(using='db2')

      自动:
        在myrouter.py文件中写以下的类:
          class Router:
            def db_for_read(self,model,**kwargs):
              return 'default'
            def db_for_write(self,model,**kwargs):
              return 'db2'

        settings配置中 DATABASE_ROUTERS= ['myrouter.Router']


    一主多从

      概念:一主多从的意思是一个读,多个写或者多个读,一个写

    随机的从下面的读
        class Router:
            def db_for_read(self,model,**kwargs):
                return random.choice([db1,db2,db3])
    
            def db_for_write(self,model,**kwargs):
                return 'default'

    分库分表

    class Router:
        # app01  default
        # app02  db2
    
        def db_for_read(self, model, **kwargs):
            if model._meta.app_label == 'app01':
                return 'default'
            elif model._meta.app_label == 'app02':
                return 'db2'
    
        def db_for_write(self, model, **kwargs):
            if model._meta.app_label == 'app01':
                return 'default'
            elif model._meta.app_label == 'app02':
                return 'db2'

    crm相关内容:

    crm是什么?
        客户管理系统,销售人员增多,客户增多,提高工作效率
    
    为什么要设立公户私户?
        避免销售进行抢单
        设置限制,提高销售的工作效率,比如3天一跟进,20天成单
        私户的上限,一般是150,根据具体公司分析
    
    有现成的crm系统吗?为什么不用现成的?
        学邦
        定制化程度高,如果要加需求要收费

      权限变化之后,重新登录才能应用权限? 不重新登录就能应用新的权限?

      权限变化之后去修改session中用户的权限
      改表结构 用户表 + 字段 session_key
    
    

      开发中遇到了什么问题(影响深刻)?

        json序列化

      表结构的变化
      需求的取舍
     

    rbac

        rbac如何实现权限的控制?

    url就代表权限,能访问这个url就表示有这个权限。

    流程:

    1.中间件
        白名单
      登录校验
      免认证
      权限的校验
      pid,id 有pid表示当前访问的是子权限
      没有pid    当前访问的是父权限   二级菜单

    2.登录
      
    登录成功后权限信息的初识化
      根据用户获取当前用户的权限信息
      跨表 去空 去重
      构建数据结构
      权限的结构
        简单的权限控制
        非菜单权限的归属
        路径导航
        权限控制到按钮级别
      菜单的结构
        一级菜单
        二级菜单
      非权限菜单的归属
        权限和菜单的数据结构

  • 相关阅读:
    TensorFlow入门:debug方法
    Firefox 隐藏提示:正在安装组件,以便播放此页面的音频或视频
    CentOS 6.5挂载windows NTFS硬盘
    Linux中执行shell脚本
    CentOS opera 浏览器
    CentOS 更新为网易yum源
    Centos下替换yum源为阿里云源
    CentOS常用基础命令大全
    Linux CentOS删除或重命名文件夹和文件的办法
    给Centos7装上Chromium
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/11087086.html
Copyright © 2020-2023  润新知