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,可能是我太菜了)。
白云偷偷喝了我房顶上的一杯酒,于是她变成了晚霞。