Django——Django中创建应用、设计模型并在数据库中生成实体表

创建 Django 应用(app)

​ 在 Django 中,每一个应用(app)都是一个 Python 包,每个 app 都可用来实现一个完整的功能,整个 Django 项目就是由多个 app 组成的

创建 app

​ app 只能在 Django 项目文件夹下的命令行中创建,键入python manage.py startapp appDemo命令可以在项目文件夹下创建一个名为appDemo的 app

E:\django\djDemo>python manage.py startapp appDemo

​ 创建好的 app 目录格式如下:

在这里插入图片描述

​ 其中文件功能如下:

  • _ _ init _ _:用来标识这个文件夹是一个 Python 包
  • admin.py:是 app 管理员用来进行后台管理文件
  • apps.py:app 的配置文件
  • models.py:用来存放和数据库内容相对应的实体
  • tests.py:用来写测试代码的文件
  • views.py:接收请求,进行处理,返回应答

将 app 添加进 Django 项目

​ 刚创建好的 app 并没有和 Django 项目关联,我们要在项目中的 settings.py 文件中的INSTALLED_APPS列表里添加 app 的名字,如下所示:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appDemo',
]

​ 这样我们的 app 就算创建完成并关联到 Django 项目了

设计模型并关联数据库

​ Django 内部支持 ORM 框架,也就是说,我们可以在 Django 中创建模型并关联数据库,就可以不适用 SQL 语句实现数据的增删改查

创建模型

​ Django 中的模型就是 app 下 model.py 中的类,我们可以定义一个类,让它继承django.db.models.Model来使它变成一个模型,示例如下:

from django.db import models

# 图书类
class BookInfo(models.Model):
    # CharField 说明是一个字符串,max_length 指定字符串的最大长度
    btitle = models.CharField(max_length=255)
    # DateField 说明是一个日期类型
    bpub_date = models.DateField()

class User(models.Model):
    uname = models.CharField(max_length=30)
    upassword = models.CharField(max_length=20)
    # True 代表男
    ugender = models.BooleanField(default=True)
    ubirth = models.DateField()
    # 关系属性,建立 BookInfo 和 User 的一对多关系
    # 关系属性对应的表的字段名为 关系属性名_id
    ubook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)

​ 上边使用这个方法创建了两个模型,并使用外键ForeignKey进行了关联,这里需要强调一下,在高版本的 Django 中需要在models.ForeignKey方法中添加on_delete属性,上面的 BookInfo 和 User 为一对多的关系

关联数据库

​ 在 Django 中关联数据库分为两步,第一步是迁移(生成迁移文件),第二步是同步(执行迁移文件生成表)

迁移

​ 迁移是在项目文件夹下,使用python manage.py makemigrations命令实现的,它是将数据库的操作,以文件的形式保存下来

E:\django\djDemo>python manage.py makemigrations
Migrations for 'appDemo':
  appDemo\migrations\0001_initial.py
    - Create model BookInfo
    - Create model User

​ 如上图所示就是迁移成功了,这时在 app 的 migrations 文件夹下会生成名为 0001_initial.py 的迁移文件

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='BookInfo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('btitle', models.CharField(max_length=255)),
                ('bpub_date', models.DateField()),
            ],
        ),
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('uname', models.CharField(max_length=30)),
                ('upassword', models.CharField(max_length=20)),
                ('ugender', models.BooleanField(default=True)),
                ('ubirth', models.DateField()),
                ('ubook', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='appDemo.BookInfo')),
            ],
        ),
    ]

​ 可以看到,Django 会自动为所有的模型添加 id 属性,不需要我们手动添加

​ 在这里要强调,每次修改后的迁移都会生成新的迁移文件,这时不要删除之前的迁移文件,因为它们之间是互相关联的

同步

​ 同步的作用就是执行刚刚生成的迁移文件,在数据库中生成实体表

​ 和迁移相似,同步需要在项目文件夹下执行python manage.py migrate命令

E:\django\djDemo>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, appDemo, auth, contenttypes, sessions
Running migrations:
  Applying appDemo.0001_initial... OK

​ 如上所示即为与数据库关联成功了

​ 这里使用的是 Django 自带的 sqlite3 数据库,数据库文件在项目目录中,想改成 mysql 数据库,只需要修改 settings.py 中的DATABASE就可以,mysql 修改如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
        'NAME': 'django',
        'USER': 'root',
        'PASSWORD': '*********', # 密码
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
发布了38 篇原创文章 · 获赞 44 · 访问量 3400

猜你喜欢

转载自blog.csdn.net/scfor333/article/details/104229287