在Django中构建数据库(初学者能理解到什么程度(2))

让我们尝试使用Django创建一个数据库。

以下是Django的Hello world(初学者可以理解到哪种程度(1))的续篇。
我想创建的是一个任意输入的调查问卷。
(例)问题:您多大年纪?
(例)回答:我三岁。

数据库的选择

#### practice/config/settings.py (何も変更は加えません)
*****
#参考までに、デフォルトで設定されているデータベースがこちら
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
*****

数据库默认选择SQLite。SQLite是一种无需服务器端管理的数据库,但无法设置密码是其缺点。也可以使用MySQL或PostgreSQL。(通过修改ENGINE选项来实现。)

创建数据库表

#### practice/
$ python manage.py migrate

在Django的配置文件中,创建每个应用程序的数据库表。

#### practice/config/settings.py (何も変更は加えません)
*****
#参考までに、デフォルトでインストールされているアプリケーションがこちら
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
*****

创建应用程序和数据库的连接口。

#### practice/myapplication/models.py

from django.db import models

#質問用のデータに関するクラス
class Asking(models.Model):
    asking_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.asking_text

#回答用のデータに関するクラス
class Answering(models.Model):
    asking = models.ForeignKey(Asking, on_delete=models.CASCADE)
    answering_text = models.CharField(max_length=200)
    def __str__(self):
        return self.answering_text

***Field:models.Model类中分别有存储字符串(Char)、数字(Integer)、时间(DateTime)等数据的字段。
ForeignKey:继承第一个参数指定的类。
on_delete:指定继承类被删除时的行为。
CASCADE:一同删除,PROTECT:保留

将应用程序识别为Django环境

#### practice/config/settings.py
****
INSTALLED_APPS = [
    #先頭行を追加し、アプリケーションを認識させる。
    #(フォルダ名).apps.(apps.py内のクラス名)
    'myapplication.apps.MyapplicationConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
****
#### practice/
$ python manage.py makemigrations myapplication

这样Django环境就能识别该应用程序了。需要补充说明的是,当models.py文件中的类自身发生更改时,才会执行makemigrations命令以更新数据库。

#### practice/
$ python manage.py migrate

在更新后的数据库中,创建一个表格。

让我们从管理者网站上查看数据。

#### practice/myapplication/admin.py

from django.contrib import admin

from .models import Asking, Answering
#model.pyから、AskingとAnswerigクラスをひっぱり、管理者サイトに登録
admin.site.register(Asking)
admin.site.register(Answering)
#### practice/config/settings.py

#言語コードとタイムゾーンを日本に変更
****
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
****
#### practice/

#adminサイトにログインできるユーザーを作成
$ python manage.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********

现在,您可以使用管理员帐户登录到管理者网站了。

#### practice/
$ python manage.py runserver

启动开发服务器,并访问http://127.0.0.1:8000/admin。
登录后,如果屏幕上出现了asking和answering文件夹,则表示OK。

在提问功能中,是否可以输入并保存问题和发布日期?
在回答功能中,是否可以输入并保存回答?
当问题被删除时,是否与其相关联的回答也会被删除?

最终的结果

我已经成功地从管理者网站访问到了数据库。下一步,我想试试能否将HTML与Django关联起来。

广告
将在 10 秒后关闭
bannerAds