博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

django学习

Posted on 2023-03-06 16:52  心默默言  阅读(63)  评论(0编辑  收藏  举报

1.准备工作

  • 需要安装Django包 django2.1.5+mysql5.7
  • 需要启动mysql服务,并创建一个数据库
  • 需要安装pymysql服务,代码如下:
    pip install pymysql==版本(0.9.3)
  • 创建Django项目

  新建django项目出现TypeError: unsupported operand type(s) for /: 'str' and 'str'问题

  解决方案:

  在settings.py中找到上面代码,把DIRS那行注释掉,用下面一行代替即可解决问题。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [BASE_DIR / 'templates']
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],

2.连接mysql数据库

2.1在settings.py文件中配置数据库

DATABASES = {
    'default': {
        # 连接本地mysql数据库
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mybatis',  # 你的数据库名
        'USER': 'root',  # 你的用户名
        'PASSWORD': '123456',  # 你的密码
        'HOST': 'localhost',  # 本地连接
        'PORT': '3306',  # 本地端口号
    }
}

2.2设置models.py模型类

from django.db import models


class Blog_Model(models.Model):
    name = models.CharField(db_column='name', max_length=200, blank=True, verbose_name='name')

    class Meta:
        db_table = 'Blog'


class User3(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50)
    level = models.IntegerField(default=1)
    createTime = models.DateTimeField(null=True)

    class Meta:
        db_table = 'User3'

2.3在项目的settings.py文件  INSTALLED_APPS 中插入 项目名

2.4生成迁移文件

python manage.py makemigrations db_manager

 

2.5执行迁移生成列表

python manage.py migrate

3 报错问题解决

3.1DJANGO_SETTINGS_MODULE 

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

 

 

 解决方案:

import os

from django.apps import apps
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main_test.settings')
apps.populate(settings.INSTALLED_APPS)

3.2 Model doesn't declare an explicit app_label 

RuntimeError: Model class db_manager.models.Blog_Model doesn't declare an explicit app_label and isn’t in an application in INSTALLED_APPS.

 解决方案:加上main_test.

 

3.3 RuntimeError: populate( ) isn't reentrant

这个错误信息是一个笼统的错误信息,这里django把他真正的错误信息隐藏了。因此如果想得到真正的报错信息需要改源码,位置就在下方报错信息的"/Users/zonghan/PycharmProjects/envpython3.9/lib/python3.9/site-packages/django/apps/registry.py" 。

File "/Users/zonghan/PycharmProjects/envpython3.9/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
File "/Users/zonghan/PycharmProjects/envpython3.9/lib/python3.9/site-packages/django/apps/registry.py", line 83, in populate
    raise RuntimeError("populate() isn't reentrant")

解决方案:

点进去把

raise RuntimeError("populate() isn't reentrant")

替换成

self.app_configs = {}

再次运行django就可以看到真正的错误信息

找到真正错误后,可以还原回去。