美文网首页
django日志和rest学习

django日志和rest学习

作者: 憨猜猜 | 来源:发表于2019-03-26 17:33 被阅读0次

    一.日志

    在settings文件中末尾添加

    LOG_PATH = os.path.join(BASE_DIR,'logs')
    LOGGING={
         # 必须为1
         'version' : 1,
         # 禁用日志
         'disable_existing_loggers':False,
         'loggers':{
               # 默认为空,接收数据
               '':{
                   # 将系统接收到的日志,交给handlers去处理
                   'handlers' : ['console'],
                   'level' : 'INFO',
                }
         },
         'handlers' : {
                   'console' : {
                           # handler将日志信息存放在day07/logs/sys.log
                           'filename' : '%s/%s' % (LOG_PATH,'sys.log'),
                           'level': 'INFO',   # 指定的级别
                           # 指定日志的格式
                           'formatter' : 'default',
                           # 指定是否备份
                            'class' : 'logging.handlers.RotatingFileHandler',
                            # 日志文件:5M
                            'maxBytes'  :  5*1024*1024,
                   }
          },
          'formatters' : {
                   'default' : {
                            'format' : '%(asctime)s %(message)s' 
                   }
          }
    
    }
    
    
    image.png image.png

    在settings文件50行左右添加相对地址utils.logMiddleware.LogMiddle

    image.png

    在项目目录中的utils中logMiddleware.py文件中写入

    import logging
    import time
    
    from django.utils.deprecation import MiddlewareMixin
    
    # 获取日志logger
    logger = logging.getLogger(__name__)
    
    
    class LogMiddle(MiddlewareMixin):
        # 日志处理中间件
        def process_request(self, request):
            # 存放请求过来时的时间
            request.init_time = time.time()
            return None
    
        def process_response(self, request, response):
            try:
                # 请求响应时耗时时长
                total_time = time.time() - request.init_time
                # 请求路径
                path = request.path
                # 请求方式
                method = request.method
                # 响应状态码
                status_code = response.starus_code
                # 响应内容
                content = response.content
                # 记录信息
                message = '%s %s %s %s %s' % (total_time, path, method,
                                              status_code, content)
                logger.info(message)
            except:
                logger.critical('系统错误')
            return response
    
    
    image.png image.png

    然后执行里面的任意路由日志就会自动生成

    image.png

    二.rest学习

    路由创建

    image.png

    rest方法

    class ArticleView(viewsets.GenericViewSet,
                      mixins.ListModelMixin,
                      mixins.RetrieveModelMixin,
                      mixins.DestroyModelMixin,  # 销毁
                      mixins.CreateModelMixin,
                      mixins.UpdateModelMixin,
                      ):
        # 获取资源所对应的数据信息
        queryset = Article.objects.all()
        # 序列化
        serializer_class = ArticleSerializer
    
        def list(self, request, *args, **kwargs):
            # 业务逻辑
            queryset = self.get_queryset()
            # 将对象转化成json
            # a = self.get_serializer(queryset, many=True)
            a = [{'id': i.id, 'title': i.title} for i in queryset]
            # return Response(a)
            b = []
            for i in queryset:
                data = {
                    'id': i.id,
                    'title': i.title
                }
                b.append(data)
                return Response(b)
    
        def retrieve(self, request, *args, **kwargs):
            # 获取主键所对应的对象信息
            instance = self.get_object()
            # 序列化
            serializer = self.get_serializer(instance)
            return Response(serializer.data)
    
        def perform_destroy(self, instance):
            # 实现软删除
            instance.is_delete = 1
            instance.save()
    
    image.png image.png image.png

    创建一个校检文件

    image.png

    相关文章

      网友评论

          本文标题:django日志和rest学习

          本文链接:https://www.haomeiwen.com/subject/uqrnvqtx.html