在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关联起来。