Django教程第三部分(模型创建,Django管理页面)

首先

继续 Django 教程第二部分(创建视图),我们来创建一个应用。参考《Django 实战教程(基础篇)》,开始第一次 Django 应用开发。

数据库的设置

在config/settings.py文件中进行数据库的配置。默认情况下,使用的是SQLite,因为它已经以Python的标准库的形式内置,无需额外安装。据说在生产环境中最好使用像PostgreSQL这样的数据库。由于对数据库不太了解,因此在这里先稍微研究一下数据库。根据以下文章的内容,似乎并没有说生产环境就不能用SQLite之类的问题,但它似乎不适合超出个人范围的使用,因为无法进行多个同时写入。如果只是博客之类的应用,应该没有问题。

找回話題。在config/settings.py中有一個叫做DATABASES的項目,預設設定是SQLite,如下所示。

# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

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

如果项目使用SQLite作为数据库,并且数据库的名称为NAME,则将文件保存在项目目录中(polls/db.sqlite3)。如果使用的是其他数据库(非SQLite),则需要进行额外的配置,如USER、PASSWORD、HOST等。我想尝试使用PostgreSQL,但目前先不考虑。(2021/04/13更新)
将我在Django中使用现有的PostgreSQL的试验结果描述一下。
此外,在config/settings.py中还需要设置TIME_ZONE。默认情况下,LANGUAGE为英语,TIME_ZONE为UTC,您可以进行更改。

# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/

LANGUAGE_CODE = 'ja'  # 'en-us'

TIME_ZONE = 'Asia/Tokyo'  # 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

USE_I18N、USE_L10N、USE_TZ 分别表示以下含义。保持默认为 True 即可。

    • USE_I18N: 多言語化機能を有効にするかどうか。(I18N = Internationalisation)

 

    • USE_L10N: ローカライゼーション機能を有効にするかどうか。(L10N = Localization)

 

    USE_TZ: タイムゾーン変換機能を有効にするかどうか。False だと上記の TIME_ZONE の設定が適用されない

移民

要使用数据库,需要执行称为迁移的操作,并创建数据库和表。迁移通过以下两个命令逐步进行。

    • makemigrations : モデルの定義からマイグレーションファイルを作成

 

    migrate : マイグレーションファイルの内容をデータベースに反映して、テーブルを作成・変更

由于目前还没有创建模型,因此执行makemigrations不会发生任何事情。因此只执行migrate命令。命令如下。

$ python manage.py migrage

若在没有指定参数的情况下执行命令,则会针对在config/settings.py文件中定义的INSTALLED_APPS中注册的应用程序创建表。如果想要限定特定的应用程序,则可以通过参数进行指定。默认情况下,INSTALLED_APPS如下所示。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',        # 管理サイト
    'django.contrib.auth',         # 認証システム
    'django.contrib.contenttypes', # コンテンツタイプフレームワーク
    'django.contrib.sessions',     # セッションフレームワーク
    'django.contrib.messages',     # メッセージフレームワーク
    'django.contrib.staticfiles',  # 静的ファイル管理フレームワーク
]

执行迁移命令后,将创建 mysite/db.sqlite3(目录和文件名根据数据库配置而变)。
您可以使用以下命令确认与上述应用程序相关的表已被创建。

$ sqlite3 db.sqlite3
sqlite> .tables

建立模型

通过创建被称为模型的类,可以创建和数据库表和列对应的定义,并将数据库记录作为数据库对象来处理。对象-关系映射器(ORM)功能可以处理上述对应关系以及不同数据库类型之间的差异,使数据处理变得更加容易。

在 polls/models.py 中定义模型类。在本教程中,创建两个模型:Question 和 Choice。代码如下。

from django.db import models


class Question(models.Model):
    class Meta:
        db_table = "polls_question"

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text


class Choice(models.Model):
    class Meta:
        db_table = "polls_choice"

    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

模型是通过继承django.db.models.Model类来定义的。在每个类内部的Meta类中定义了附加信息,例如对应的表名,__str__方法定义了在交互式shell或管理界面中显示的对象内容。(在上述例子中,通过Meta类定义了表名为’polls_question’或’polls_choice’,但如果未定义,则默认为<应用程序名称>_<模型类名的蛇形命名字符串>,因此可以不写上述数据库名称的定义,仍然会生成相同的数据库名称。)通过试验可以发现,在创建第一个Django应用程序后,通过参考其[试验API]可以理解__str__方法的实用性。
在每个类中,可以使用Field类作为类属性来定义表的列。在上述例子中,定义了以下类属性:

    • Question : question_text (char 型)、pub_date (date 型)

 

    Choice : choice_text (char 型)、votes (int 型)

在这里还有许多其他的Field类和Field选项,但是在这里就省略了。详细信息请参考模型字段参考资料。

在中国,用母语解释如下,只需要一种选项:
同时,在模型中用models.ForeignKey定义表之间的关系。ForeignKey定义了一对多的关系,通常在[多]表中设置一个外键,以参考[一]表的主键。在这种情况下,每个Choice都与一个Question相关联。还有其他一对一关系的定义models.OneToOneField和多对多关系的定义models.ManyToManyField。

模型激活

因为在上述中已经定义了模型,所以可以通过执行makemigrations命令来创建迁移文件,然后通过执行migrate命令将所创建的模型定义反映到数据库中。为了在项目中包含应用程序,需要在config/settings.py文件的INSTALLED_APPS中添加makemigrations命令之前的应用程序。对于自定义应用程序(如本例中的Polls应用程序),需要添加位于各应用程序目录下的apps.py文件中的AppConfig(在这里是PollsConfig)的配置。由于PollsConfig位于polls/apps.py中,所以需要将其写为’polls.apps.PollsConfig’。

# Application definition

INSTALLED_APPS = [
    'polls.apps.PollsConfig',      # Polls アプリ
    'django.contrib.admin',        # 管理サイト
    'django.contrib.auth',         # 認証システム
    'django.contrib.contenttypes', # コンテンツタイプフレームワーク
    'django.contrib.sessions',     # セッションフレームワーク
    'django.contrib.messages',     # メッセージフレームワーク
    'django.contrib.staticfiles',  # 静的ファイル管理フレームワーク
]

由于上述命令中的“Polls”应用程序被识别,因此可以使用以下命令进行迁移。尽管以下指定了“polls”,但如果没有进行更改,则不会处理任何参数,即使读取整个文件也应该只处理“polls”。迁移文件将保存在“polls/migrations”目录中。

$ python manage.py makemigrations polls
$ python manage.py migrate 

介绍 Django 管理员系统

在这里尝试使用Django默认的管理网站。首先创建管理用户。执行以下命令,设置用户名、邮箱和密码。

$ python manage.py createsuperuser

运行命令 “$ python manage.py runserver” 启动开发服务器,访问 http://127.0.0.1:8000/admin/ 可以看到管理网站。使用之前设置的用户名和密码登录后,可以进行各种操作,但这里略过不提。

最后

在进行第二次创建 Django 应用程序的同时,我使用了实用的 Django 教科书(基础篇)来辅助学习。这本实用的 Django 教科书(基础篇)帮助我加深了理解,非常有帮助。接下来,我将继续进行第三次创建 Django 应用程序。

以下是相关文章的链接。
– Django教程①(安装并创建项目)
– Django教程②(创建视图)
– Django教程④(模板)
– Django教程⑤(通用视图)
– Django教程⑥(自动测试)
– Django教程⑦(静态文件)

广告
将在 10 秒后关闭
bannerAds