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教程⑦(静态文件)