1000、Django错误

错误: no such table: auth_user

python manage.py migrate
python manage.py createsuperuser

## 错误: return database_name == ':memory:' or 'mode=memory' in database_name

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    }
}

Django3+celery4.4报错DatabaseWrapper objects created in a thread can only be used in that same thread.

执行异步任务时报错:

django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 2068603070080 and this is thread id 2069065236128.

解决方法:

原先启动命令:

windows: celery -A xxx worker -l info -P eventlet        可能需安装 eventlet
Linux: celery -A xxx worker -l info

替换为:

解决django同步数据库的时候app models表没有成功创建的问题

问题描述:

  • 在django中创建了一个app,而且在app中自定义创建了几个数据表,在同步的时候系统自带的表可以成功, 但是 models 中的没有生效,而且进入对应 app下的migrations目录,发现为空,应该如何解决呢!

解决方式:

然后就会看到成功了!

SQLite 版本库错误

两个解决办法 方法一:给Django降级

方法二:升级SQLite

下载地址:https://www.sqlite.org/download.html

检查Python的SQLite3版本

Django3+celery4.4报错DatabaseWrapper objects created in a thread can only be used in that same thread.

执行异步任务时报错:

django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 2068603070080 and this is thread id 2069065236128.

解决方法:

原先启动命令:

替换为:

django后台自定义字段展示,失去排序,添加admin_order_field即可

例如: model.py

admin.py

CELERY 4.3.0 任务失败重试机制

存在的现象

在异步调用任务中经常需要调用第三方的api请求,如果一次执行失败,则应该进行重试执行。否则,如果在执行一些连续性的chain链条任务,前面执行失败,那么后续的也就不用执行了。

下面来看看一个发送邮件失败,然后重试执行的示例。

CELERY任务的文档结构

错误重试示例

故意将邮件服务的地址配置错误

为了做到错误的演示,我首先将发送邮件的smtp地址写错,如下:

那么稍后执行发送邮件的时候,就一定会报找不到smtp的错误。

编写错误重试的TASK任务

该示例任务将会进行调用发送邮件,当发生错误后,间隔3秒则重试执行一次,总共5次。 可以通过print的打印信息来确认重试的次数。

启动CELERY任务

windows启动命令:

linux启动命令:

执行CELERY任务

启动完毕celery之后,那么下面进行交互模式进行测试,执行如下:

执行完毕任务后,查看celery的执行日志,如下:

可以看到,上面的日志中的打印信息。 第一次执行任务,则发送了一次报错。 随后一直重试执行了5次都报错,说明重试的5次是从第一次执行失败后计算的。

Django 渲染模板与 vue 的 {{ }} 冲突解决方法

如果不可避免的在同一个页面里既有 django 渲染又有 vue 渲染的部分,可有 2 种方式解决

方法一:

  采用 vue 的 delimiters 分隔符。

方法二:

建议把 vue 的部分用

包起来。

见文档:https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#verbatim

Last updated