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,可能是我太菜了)。


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

python manage.py createsuperuser Traceback (most recent call last): File "E:\learn\ttsxzjc\manage.py", line 15, in <module> execute_from_command_line(sys.argv) File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\management\__init__.py", line 371, in execute_from_command_line utility.execute() File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\management\__init__.py", line 347, in execute django.setup() File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\__init__.py", line 16, in setup from django.urls import set_script_prefix File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\__init__.py", line 1, in <module> from .base import ( File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\base.py", line 8, in <module> from .exceptions import NoReverseMatch, Resolver404 File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\urls\exceptions.py", line 1, in <module> from django.http import Http404 File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\http\__init__.py", line 5, in <module> from django.http.response import ( File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\http\response.py", line 13, in <module> from django.core.serializers.json import DjangoJSONEncoder File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\serializers\__init__.py", line 23, in <module> from django.core.serializers.base import SerializerDoesNotExist File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\core\serializers\base.py", line 6, in <module> from django.db import models File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\db\models\__init__.py", line 3, in <module> from django.db.models.aggregates import * # NOQA ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\learn\ttsxzjc\.venv\Lib\site-packages\django\db\models\aggregates.py", line 5, in <module> from django.db.models.expressions import Case, Func, Star, When File "E:\learn\ttsxzjc\.venv\Lib\site-packages\djan
最新发布
03-25
<think>好的,我现在需要解决用户在Django创建超级用户时出现的traceback错误。根据用户提供的引用信息,我需要先分析可能的原因。 首先,用户提到引用了几个同的错误解决方案,比如SQLite URI支持的错误、MySQLdb模块未安装的错误、生成器表达式缺少括号的错误,以及Kombu库中的Redis问题。这些错误可能涉及到同的组件,所以需要确定用户具体遇到的是哪个错误。 用户的问题是关于创建超级用户时的traceback错误,但并没有提供具体的错误信息。因此,我需要根据常见的Django创建超级用户时的错误来推测可能的原因,并结合提供的引用中的解决方案进行排查。 首先,常见的创建超级用户错误可能包括数据库连接问题。例如,引用[4]提到如果没有安装MySQL-python模块,Django无法连接MySQL数据库,导致错误。如果用户使用的是MySQL数据库,可能需要检查是否安装了mysqlclient,这是Django推荐的MySQL适配器。此外,引用[1]中的SQLite URI错误可能与数据库配置有关,但通常出现在使用特定URI格式时,比如在DATABASES配置中使用'NAME'带有特殊参数,导致Django的SQLite后端支持。这种情况下需要检查settings.py中的数据库配置是否正确,是否有必要的参数。 另一个可能的问题涉及第三方库的版本兼容性。例如,引用[3]中提到的Kombu库中的Redis问题,需要修改代码中的zadd方法参数格式。这可能出现在使用Celery等库时,但和创建超级用户的关联可能大,除非用户在创建用户时使用了异步任务。过,如果错误堆栈中涉及到Kombu或Redis相关代码,可能需要检查这些库的版本和代码调整。 还有引用[5]中的生成器表达式语法错误,例如在Django的某个文件中多了一个逗号,导致语法错误。这种情况可能出现在用户自定义的代码或第三方库中,需要根据错误提示定位到具体的文件和行号,检查并修正语法错误。 此外,用户提供的引用[2]是关于CentOS部署Django项目的记录,可能涉及环境依赖问题,比如Python版本、虚拟环境配置或其他系统库的缺失。如果用户的环境配置正确,可能导致各种运行时错误,包括创建超级用户时的失败。 接下来,我需要整理这些可能的解决方案,并按照排查步骤提供给用户。首先建议用户检查具体的错误信息,因为同的错误需要同的处理方式。然后根据错误信息中的关键字,比如“MySQLdb模块未找到”、“SQLite URI支持”或“生成器表达式必须加括号”,对应到相应的解决方案。 例如,如果错误信息涉及MySQLdb,那么按照引用[4]的建议,安装mysqlclient包即可。如果是SQLite URI的问题,可能需要检查数据库配置,并按照引用[1]中的方法修改Django的源代码或调整配置。如果是语法错误,如引用[5]中的多余逗号,则需要修改对应的代码行。 此外,用户可能在虚拟环境中缺少必要的依赖包,或者Python版本与Django版本兼容。建议用户检查虚拟环境是否正确激活,并确保所有依赖包已安装且版本兼容。使用pip list命令查看已安装的包,确认mysqlclient、django等包的版本是否符合要求。 最后,如果错误信息明确,建议用户提供具体的traceback信息,以便更准确地诊断问题。同时,可以建议用户尝试在干净的虚拟环境中重新安装依赖,或者检查项目的代码库是否有自定义的用户模型或管理器,这些可能在创建超级用户时引发问题。</think>### Django创建超级用户错误解决方案 #### 1. 检查具体错误信息 首先需查看终端输出的完整Traceback信息,确定错误类型。常见错误类型及解决方法如下: --- #### 2. 常见错误类型及修复方法 **2.1 数据库连接问题** - **症状**:错误提示包含`django.db.utils.OperationalError`或`ModuleNotFoundError: No module named 'MySQLdb'` - **原因**:未安装数据库驱动(如MySQL)或配置错误 - **解决方案**: 1. **MySQL数据库**:安装`mysqlclient`包 ```bash pip install mysqlclient ``` 2. **SQLite URI错误**:检查`settings.py`中数据库配置,避免使用`'NAME': 'file:memorydb?mode=memory&cache=shared'`等特殊URI格式[^1] 3. 验证`DATABASES`配置是否包含非法参数,如`'OPTIONS': {'uri': True}` --- **2.2 第三方库兼容性问题** - **症状**:错误涉及`kombu`或`redis`组件 - **原因**:Celery/Kombu库版本与Redis驱动兼容 - **解决方案**: 1. 找到文件`site-packages/kombu/transport/redis.py` 2. 修改代码: ```python # 原始错误代码 pipe.zadd(self.unacked_index_key, delivery_tag, time()) # 修改为 pipe.zadd(self.unacked_index_key, {delivery_tag: time()}) [^3] ``` --- **2.3 语法错误** - **症状**:错误提示`SyntaxError: Generator expression must be parenthesized` - **原因**:代码中存在多余逗号或括号缺失 - **解决方案**: 1. 根据Traceback定位到错误文件(如Django中间件或第三方库) 2. 修正类似代码: ```python # 错误示例 '%s=%s' % (k, v) for k, v in params.items(), # 正确写法 '%s=%s' % (k, v) for k, v in params.items() # 去掉末尾逗号[^5] ``` --- **2.4 环境依赖缺失** - **症状**:部署时出现`libpythonXXX.so.1.0`缺失或`gcc`编译错误 - **原因**:系统缺少Python开发依赖 - **解决方案**(CentOS示例): ```bash sudo yum install python3-devel openssl-devel bzip2-devel libffi-devel ``` --- #### 3. 通用排查步骤 1. **创建干净的虚拟环境**: ```bash python -m venv myenv source myenv/bin/activate pip install -r requirements.txt ``` 2. **检查Django版本兼容性**: ```bash pip list | grep Django # 推荐使用Django 3.2 LTS或4.x稳定版 ``` 3. **验证用户模型**: - 检查`models.py`中是否自定义了用户模型但未正确设置`AUTH_USER_MODEL` - 确保`settings.py`中配置: ```python AUTH_USER_MODEL = 'auth.User' # 默认使用内置用户模型 ``` --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值