1 使用反向工程(前置条件:django项目中setting文件的数据库已经配置好。没有执行过迁移命令)
第一步必须是python manage.py inspectdb
第二步是 python manage.py inspectdb > app/models.py
反向工程后的manytomany的字段,需手动自己建一张表,外键也要自己提前想好,在模型中建立,然后手动在models中添加就行了。models中没有自动添加外键的功能,只能手动进去加
两步都不能少
2 model里面的choice:
STATUS_CHOICE = (
(0, '未执行'),
(1, '已执行')
)
name = models.CharField(max_length=255, blank=True, null=True, verbose_name='监控名称')
excute_time = models.DateTimeField(blank=True, null=True, verbose_name='执行时间')
last_excute_time = models.DateTimeField(blank=True, null=True, verbose_name='最后执行时间')
status = models.CharField(STATUS_CHOICE , max_length=255,default=0 , verbose_name='状态')
createtime = models.DateTimeField(blank=True, null=True, verbose_name='创造时间')
3 自定义xadmin的主页
先在setting里面注册,然后在新建一个adminx.py的文件,进行注册所对应的model。
4 日志文件的输出:
新建一个文件或者是在setting里面进行配置。
rq = time.strftime('%Y%m%d', time.localtime(time.time()))
BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
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': '[%(asctime)s][%(levelname)s][%(filename)s:%(lineno)d]%(message)s'
},
},
# 过滤器
'filters': {
},
# 处理器
'handlers': {
# 日志等级CRITICAL > ERROR > WARNING > INFO > DEBUG
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', #原生的sql语句会打印至日志,会导致文件很大。所以最好注释掉
'stream' : 'ext://sys.stdout',
# 文件重定向的配置,将打印到控制台的信息都重定向出去 python manage.py runserver >> /home/aea/log/test.log
'formatter': 'standard'
# 制定输出的格式,注意 在上面的formatters配置里面选择一个,否则会报错
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_LOG_DIR, f"{rq}_info.log"),
#这是将普通日志写入到日志文件中的方法,
'formatter': 'standard' },
# 默认的
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, f"{rq}_info.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 3, # 最多备份几个
'formatter': 'standard',
'encoding': 'utf-8',
},
# 专门用来记错误日志
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,自动切
'filename': os.path.join(BASE_LOG_DIR, f"{rq}_err.log"), # 日志文件
'maxBytes': 1024 * 1024 * 50, # 日志大小 50M
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
# 这里直接输出到控制台只是请求的路由等系统console,当使用重定向之后会把所有内容输出到log日志
'level': 'DEBUG', 'propagate': True, },
'django.request ': {
'handlers': ['console', 'file'],
'level': 'WARNING',
# 配合上面的将警告log写入到另外一个文件 'propagate': True,
},
# 默认的logger
'': {
'handlers': ['default', 'error'],
'level': 'DEBUG',
'propagate': True, # 向不向更高级别的logger传递
},
},
}