zoukankan      html  css  js  c++  java
  • Title

    django根据不同app配置相应的log文件

    settings.py

    # django logging
    LOG_PATH = "/var/log/blog/"
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': '[%(levelname)s] %(asctime)s [%(filename)s:%(lineno)d] %(message)s'
            },
        },
        'handlers': {
            'app01': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'formatter': 'standard',
                'filename': '%s/app01.log' % LOG_PATH,
                'maxBytes': 1024 * 1024 * 10,
                'backupCount': 3,
            },
            'app02': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'formatter': 'standard',
                'filename': '%s/app02.log' % LOG_PATH,
                'maxBytes': 1024 * 1024 * 10,
                'backupCount': 3,
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'standard',
            }
        },
        'loggers': {
            'app01': {
                'handlers': ['app01', 'console'],
                'level': 'DEBUG',
                'propagate': True,
            },
            'app02': {
                'handlers': ['app02', 'console'],
                'level': 'DEBUG',
                'propagate': True,
            },
        }
    }

    在app01的views.py中进行调用

    import logging
    log = logging.getLogger("app01")
    
    log.error('Hello')

    在/var/log/blog/app01.log中就会有字符串'Hello'打印出来。

    CentOS/Debian/Ubuntu ShadowsocksR单/多端口一键管理脚本:
    主用代码:
    yum -y install wget
    wget -N --no-check-certificate https://softs.fun/Bash/ssr.sh 
    chmod +x ssr.sh  
    bash ssr.sh
    备用代码:
    yum -y install wget
    wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh 
    chmod +x ssr.sh 
    bash ssr.sh
    
    一键加速VPS服务器
    yum -y install wget
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
    chmod +x bbr.sh
    ./bbr.sh
    把上面整个代码复制后粘贴进去,不动的时候按回车,然后耐心等待,最后重启vps服务器即可。该方法是开机自动启动,部署一次就可以了。
    
    windows: https://nofile.io/f/6Jm7WJCyOVv/ShadowsocksR-4.7.0-win.7z SSR客户端
    安卓 :https://nofile.io/f/GRWw7PbADrc#1c6c32f969e7f5d9
    
    转载GitHub:https://github.com/Alvin9999/new-pac/wiki/%E8%87%AA%E5%BB%BAss%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%99%E7%A8%8B
    SSR.txt
    版权归作者所有,任何形式转载请联系作者。
    作者:petanne(来自豆瓣)
    来源:https://www.douban.com/note/301166150/
    
    1.多表连接查询:感觉django太NX了。
      class A(models.Model):
        name = models.CharField(u'名称')
      class B(models.Model):
        aa = models.ForeignKey(A)
    B.objects.filter(aa__name__contains='searchtitle')
    
    1.5 反向查询,补上记录1.5,感觉django太太太NX了。
      class A(models.Model):
        name = models.CharField(u'名称')
      class B(models.Model):
        aa = models.ForeignKey(A,related_name="FAN")
        bb = models.CharField(u'名称')
      查A: A.objects.filter(FAN__bb='XXXX'),都知道related_name的作用,A.FAN.all()是一组以A为外键的B实例,可前面这样的用法是查询出所有(B.aa=A且B.bb=XXXX)的A实例,然后还可以通过__各种关系查找,很好用!!!
    
    2.条件选取querySet的时候,filter表示=,exclude表示!=。
    querySet.distinct() 去重复
    __exact 精确等于 like 'aaa'
     __iexact 精确等于 忽略大小写 ilike 'aaa'
     __contains 包含 like '%aaa%'
     __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以...开头
    __istartswith 以...开头 忽略大小写
    __endswith 以...结尾
    __iendswith 以...结尾,忽略大小写
    __range 在...范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False
    
    例子:
    >> q1 = Entry.objects.filter(headline__startswith="What")
    >> q2 = q1.exclude(pub_date__gte=datetime.date.today())
    >> q3 = q1.filter(pub_date__gte=datetime.date.today())
    >>> q = q.filter(pub_date__lte=datetime.date.today())
    >>> q = q.exclude(body_text__icontains="food")
    
    即q1.filter(pub_date__gte=datetime.date.today())表示为时间>=now,q1.exclude(pub_date__gte=datetime.date.today())表示为<=now
    
    2013/12/12补充:
    “在django models中取得一个字段的distinct值”。就是select distinct xxx from table_name ...这样的功能。使用values会生成ValuesQuerySet(形如N个dict组成的list),猜测大数据无额外性能影响,毕竟queryset系列都是使用时才查询操作的。
    xxxx.objects.values("field_name").distinct()
    #或者
    xxxx.objects.distinct().values("field_name")
    这两句生成的sql语句相同,原帖地址:http://blog.csdn.net/tsbob/article/details/1340293。
    
    关于缓存:
    queryset是有缓存的,a = A.objects.all(),print [i for i in a].第一次执行打印会查询数据库,然后结果会被保存在queryset内置的cache中,再执行print的时候就会取自缓存。
    很多时候会遇到仅需判断queryset是否为空的情况,可以1. if queryset:pass 2.if queryset.count>0:pass 3.if queryset.exists():pass. 三种方式性能依次提升。
    当queryset非常巨大时,cache会成为问题。此时可以queryset.iterator(),迭代器的用处就不多说了,根据具体需求情况使用。
    Django ORM
    # in sqlite:
        article_obj=models.Article.objects
                  .filter(nid=1)
                  .extra(select={"standard_time":"strftime('%%Y-%%m-%%d',create_time)"})
                  .values("standard_time","nid","title")
        print(article_obj)
        # <QuerySet [{'title': 'MongoDb 入门教程', 'standard_time': '2017-09-03', 'nid': 1}]>
    ORM values
  • 相关阅读:
    第一节:SpringMVC概述
    SpringMVC【目录】
    Windows 系统快速查看文件MD5
    (error) ERR wrong number of arguments for 'hmset' command
    hive使用遇到的问题 cannot recognize input
    Overleaf支持的部分中文字体预览
    Understanding and Improving Fast Adversarial Training
    Django2实战示例 第十三章 上线
    Django2实战示例 第十二章 创建API
    Django2实战示例 第十一章 渲染和缓存课程内容
  • 原文地址:https://www.cnblogs.com/guotianbao/p/10132542.html
Copyright © 2011-2022 走看看