Django异常报错持续记录,欢迎提供问题

Posted 我辈李想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django异常报错持续记录,欢迎提供问题相关的知识,希望对你有一定的参考价值。

文章目录


前言

虽然我们已经很小心,但是django在日常使用中还是会出现一些问题,总是有一些报错是少部分人碰到的,而且都不是很好处理。本篇博客是一个记录,也作为收集,愿我们共同进步。


一、Model class m.m doesn‘t declare an explicit app_label and isn‘t in INSTALLED_APPS

项目场景:

此问题区分具体场景,多发生在views.py通过import导入app的models.py文件。


问题描述

这个报错具体原因不是报错提示的原因,而是我们import导入时报的错误,错误原因指向INSTALLED_APPS,注意,其实这时我们INSTALLED_APPS是正常的。


原因分析:

djnago项目app下的apps.py文件配置问题,可能是移动app造成的。


解决方案:

# settings的INSTALLED_APPS
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.gis',  # 新增

    'rest_framework',
    'corsheaders',

    'geoserver.apps.GeoserverConfig',
    'users.apps.UsersConfig',
]
# apps.py文件
from django.apps import AppConfig


class UsersConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'users'

# models.py文件导入
from geoserver.models import SarLayer

二、django报错django.db.utils.InterfaceError:(0,‘’)

项目场景:

在使用django的models类进行增删改查时,可能意外触发,一般情况下如果触发,后续数据库操作均无效。


问题描述

如果程序做了异常处理,收到的报错信息将是(0,‘’),如果后端报错将是django.db.utils.InterfaceError:(0,‘’)。


原因分析:

mysql、oracle数据库均可能触发这个问题,django默认的sqlite3没有这个问题。主要是数据库连接超过8小时将自动断开,后续通过这个链接的均无法使用。


解决方案:

网络上基本有3种方式:
第一种:因为长时间没有使用连接池里的连接,导致一部分连接已经失效,因此手动清理一下老旧的连接即可。

import django.db
django.db.close_old_connections()
print(list(django.contrib.auth.models.User.objects.all()))

第二种:

from django.db import transaction 


class Command(BaseCommand):
    help = "Check order"

    def add_arguments(self, parser):
        parser.add_argument("--order-no", nargs="?", type=str)

    def handle(self, *args, **options):
        with transaction.atomic():
            order = Orders.objects.get(order_no=options["order_no"])
            print(order)

第三种:

self.db = pymysql.connect('ip', 'user', 'password', 'database', charset='utf8')
self.cur = self.db.cursor()
sel = 'SELECT title FROM dj_news WHERE type=1 ORDER BY id DESC LIMIT 200'
self.db.ping(reconnect=True)  # 检查连接是否存在,断开的话重连
self.cur.execute(sel)

总结

通过整理这些bug,总有能够帮到你我他,或者提供一些灵感。

Django框架,查询多条记录报错

#出错代码及报错信息:

技术图片

 

 主要是因为获取的查询集是多个对象,需要设置many=TRUE, safe =False 如下:

技术图片

 

 

 


  

以上是关于Django异常报错持续记录,欢迎提供问题的主要内容,如果未能解决你的问题,请参考以下文章

Django

TypeScript 报错汇总

django中的信号

Django 详解 信号Signal

如何记录 Django 芹菜任务中发生的异常

Nginx+Gunicorn+Supervisor+Django 报错