• ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用


    一.ModelViewSet 路由

    因为我们正在使用ViewSet代替View,实际上已经不再需要自己来设计URL的配置了。将资源和视图、URL绑定到一起是一个可以自动完成的过程,只需要使用Router即可。我们需要做的就是将视图集注册到Router上去而已。

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
    
        #评论
        url(r'comment/$', views.CommentViewSet.as_view({
             'get': "list",
             'post': 'create'
         })),
         
         url(r'comment/(?P<pk>d+)/$', views.CommentViewSet.as_view({
             'get': 'retrieve',
             'put': 'update',
             'delete': 'destroy'
         })),
    ]
    
    from rest_framework.routers import DefaultRouter
    
    router = DefaultRouter()
    # 注册路由,表示路径comment对应视图函数CommentViewSet
    router.register(r'comment', views.CommentViewSet)
    urlpatterns += router.urls

    将ViewSets注册到Routers的过程实际上类似于提供一个urlpattern。我们引入了两个参数,一个是views的URL prefix,另一个是viewset本身。 
    我们使用的DefaultRouter也会自动地帮我们创建API root视图,多余路由可以注释掉了!

    二.django logging配置

    修改settings.py, 最后一行添加

    BASE_LOG_DIR = os.path.join(BASE_DIR, 'log')
    # 日志相关配置
    LOGGING = {
        'version': 1,  # 保留字段
        'disable_existing_loggers': False,  # 不要禁用已经存在的logger实例
    
        'formatters': {  # 定义三种日志显示的格式
            'standard': {
                'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                          '[%(levelname)s][%(message)s]'
            },
            'simple': {
                'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
            },
            'collect': {
                'format': '%(message)s'
            }
        },
    
        'filters': {  # 定义一个过滤规则
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
    
        'handlers': {  # 日志流的处理方式
            'console': {  # 把日志打印到终端
                'level': 'DEBUG',
                'filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                'filename': os.path.join(BASE_LOG_DIR, "info.log"),  # 日志文件
                'maxBytes': 1024 * 1024 * 500,  # 日志大小 500M
                'backupCount': 3,  #
                'formatter': 'standard',
                'encoding': 'utf-8',
            },
            'error': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                'filename': os.path.join(BASE_LOG_DIR, "err.log"),  # 日志文件
                'maxBytes': 1024 * 1024 * 500,  # 日志大小 500M
                'backupCount': 5,
                'formatter': 'standard',
                'encoding': 'utf-8',
            },
            'collect': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                'filename': os.path.join(BASE_LOG_DIR, "collect.log"),
                'maxBytes': 1024 * 1024 * 500,  # 日志大小 500M
                'backupCount': 5,
                'formatter': 'collect',
                'encoding': "utf-8"
            }
        },
        'loggers': {
    
           # 默认的logger应用如下配置
            '': {
                'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除
                'level': 'DEBUG',
                'propagate': True,  # 是否向父级logger实例传递日志信息
            },
    
            # 名为 'collect'的logger还单独处理
            'collect': {
                'handlers': ['console', 'collect'],
                'level': 'INFO',
            }
        },
    }

    注意要手动创建log目录,目录里面创建3个文件err.log,info.log,collect.log

    使用

    在视图函数中使用时, 先导入模块, 并声明变量

    import logging
    # 生成一个以当前文件名为名字的 logger实例
    logger = logging.getLogger(__name__)
    # 生成一个名字为collect的日志实例
    collect_logger = logging.getLogger('collect')

    然后在逻辑代码中加入

    logger.warning('找不到记录...')
    或者
    collect_logger.info(name)

    Python logger流示图

    三.django-debug-toolbar使用指南

    安装

    pip3 install django-debug-toolbar

    配置

    1.在settings.py中 将debug_toolbar添加到INSTALL_APPS 中,最后一行添加

    INSTALLED_APPS = [
        …
        'debug_toolbar',
    ]

    2.urls.py中

    from django.conf import settings
    from django.conf.urls import include, url
    
    if settings.DEBUG:
        import debug_toolbar
        urlpatterns = [
            url(r'^__debug__/', include(debug_toolbar.urls)),
        ] + urlpatterns

    3.在settings.py中间件中加入DebugToolbarMiddleware,最后一行添加

    MIDDLEWARE = [
        # ...
        'debug_toolbar.middleware.DebugToolbarMiddleware',
    ]

    4.如果是本机调试,还在将127.0.0.1加入 INTERNAL_IPS

    在settings.py中加入以下配置项:

    INTERNAL_IPS = ['127.0.0.1', ]

    5. 配置jQuery的URL

    django-debug-toolbar 默认使用的是Google的地址,默认配置如下:

    JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'

    国内用不了的话可以在settings.py中配置一下,例如(我这里特意选用了和原作者相同版本的jQuery):

    修改settings.py,最后一行添加

    DEBUG_TOOLBAR_CONFIG = {
        "JQUERY_URL": '//cdn.bootcss.com/jquery/2.2.4/jquery.min.js',
    }

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

    DEBUG_TOOLBAR_CONFIG = {
        "JQUERY_URL": '',
    }

    使用

    访问具体路径的时候在页面右侧有各项配置面板,点击即可查看各种调试信息。

     

  • 相关阅读:
    【转】shell脚本常用命令
    【转】应该知道的Linux技巧
    背景颜色变成豆沙绿色~
    缓冲区溢出攻击
    恶意代码简介
    atitit.  web组件化原理与设计
    Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案
    Atitit.跨语言异常转换机制 java c# php到js的异常转换
    atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了
    Atiti。流量提升软件设计大纲规划 v1 q45
  • 原文地址:https://www.cnblogs.com/erhao9767/p/10712013.html
Copyright © 2020-2023  润新知