Django踩坑记录

Django踩坑记录


现在把遇到的问题记录下来,不知道能坚持多久,希望这次走得远一点。


1 app注册

  • 问题描述
    启动项目时报错 Application labels aren't unique, duplicates: <AppName>
  • 原因
    如果通过django-admin startproject <ProjectName>在控制台新建项目,则app是不用进行手动注册的
  • 解决方案
    不需要在INSTALLED_APPS注册app

不报错就这么用。如果后面出问题,也可以考虑手动注册,详见问题3


2 模板不渲染

  • 问题复现
    浏览器可以正常下载CSS文档,但不会加载
  • 原因
    可能导致这个问题的原因很多,对于我的环境而言,DTL不允许有<!DOCTYPE html>标签存在,原因尚不明确。也有可能是配置静态路由出问题。
  • 解决方案
    删除即可

3 Model路径问题

  • 问题复现
    启动项目时报错Model class <ModelName> doesn't declare an explicit app_label and isn't in an app
  • 原因
    一般是搜索model时路径出错。如果不在INSYALLED_APPS手动注册app,则无法搜索model所在模块;如果注册则变为问题1。这里我发现我出现问题1的根源所在:我的一个app名为admin,导致重复定义,应重新命名。如图,因为我用不到官方的admin模块,直接注释掉后可正常运行。
    在这里插入图片描述

结论:不要起这种模糊宽泛的名字!


4 不采用ORM时

  • 问题复现
    启动项目时报错django.db.utils.OperationalError: (1054, "Unknown column <ColumnName> in 'field list'")
  • 原因
    有时进行原生语句查询,甚至可以不导入Model,并且完整性约束也可以全部在数据库完成(但主键要声明)而不必依赖ORM定义,仍可以正常进行ORM查询。这里报错就是因为没有按照Django要求指定主键。

5 NOT NULL约束(SQL)

不是很理解为什么做了非空约束之后MySQL还是对空值照收不误。粗暴解决,在接收POST表单时手动检查。


6 datetime.datetime

  • 问题复现
    控制台警告can't subtract offset-naive and offset-aware datetimes
    实际入库的时间值和我控制台打印出来的时间值不一致,显然是采用了不同时区。
  • 原因
    settings中默认指定```USE_TZ = True``
  • 解决方案
    参考解释1 参考解释2
    到最后是调通了,但是思路仍然很不清楚。我不知道datetime模块自身是否提供了解决这个问题的相关方法。

日期模块用起来很不顺手,如timedelta类型的格式化输出只提供days和seconds两个属性,为了得到H-M-S格式,最后我是自己写方法实现的(没找到相关API,可能是我太菜了)。


白云偷偷喝了我房顶上的一杯酒,于是她变成了晚霞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中,我们可以使用日志记录记录应用程序中出现的错误信息。当应用程序发生错误时,我们可以使用 logging.error() 方法记录错误信息,并将错误信息写入到指定的日志文件中。 以下是一个简单的 Django 日志配置示例,该配置指定了一个名为 "file" 的日志处理器,并将其绑定到了 "django" 这个 logger 上。在这个配置中,我们设置日志级别为 ERROR,表示只有 ERROR 级别及以上的日志才会被记录下来,并将错误日志写入到指定的文件中。 ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'class': 'logging.FileHandler', 'filename': '/path/to/error.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'ERROR', }, }, } ``` 如果我们想在代码中记录错误信息,在应用程序中捕获异常并使用 logging.error() 方法记录错误信息即可,例如: ```python import logging logger = logging.getLogger(__name__) def my_view(request): try: # some code that may raise an exception except Exception as e: logger.error('Error occurred: %s', e) ``` 在这个例子中,我们在应用程序的某个函数中使用 try/except 语句来捕获可能出现的异常,并使用 logging.error() 方法记录错误信息。在记录错误信息时,我们可以使用 %s 格式化字符串来将异常信息作为参数传递给 logging.error() 方法。 通过这种方式记录错误信息,我们可以在日志文件中查看应用程序出现的错误信息,从而更好地管理和维护我们的 Django 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值