从零开始的Django(第二部分)
上次
从零开始的Django(第一部分)- Qiita
文献资料
第2部分:第一次创建Django应用程序 | Django文档 | Django
数据库的设置
我的网站/设置.py
-
- jangoの設定をいろいろ書いてあるPythonモジュール
- データベースのサポートなどもデフォルトで入っている
安装的应用程序
应用程序的重要部分设置。详细如下:
– django.contrib.admin – 管理(admin)网站
– django.contrib.auth – 认证系统
– django.contrib.contenttypes – 内容类型框架
– django.contrib.sessions – 会话框架
– django.contrib.messages – 消息框架
– django.contrib.staticfiles – 静态文件管理框架
建立桌子
创建数据库表的命令如下所示。 de
python manage.py migrate
-migrate命令将根据上述INSTALLED_APPS的设置,参考”mysite/setting.py”文件中的数据库配置,创建所有必要的数据库。
-可以使用命令行客户端来显示表的内容
– \dt (PostgreSQL)
– SHOW TABLES; (MySQL)
– .schema (SQLite)
– SELECT TABLE_NAME FROM USER_TABLES; (Oracle)
生成数据库模型
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
-
- QuestionとChoiceのモデル二つを生成している
-
- どちらもmodelsクラスのサブクラス
-
- 個々のクラスはモデルのデータベースフィールを表現している
-
- CharFiledやIntegerFieldなどでどのようなデータ型を記憶させるかを指定している
-
- models.CharField(max_length=200)やmodels.IntegerField(default=0)のように条件や初期値も指定可能
- ForeignKey(外部キー)でQuestionとリレーションシップを定義している。
将应用程序应用到项目中。
-
- アプリケーションをプロジェクトに含めるにはsetting.py’のINSTALLED_APPS`に設定を追加する
- アプリケーション(今回はPolls)内のapps.py内に記載されているクラスをINSTALLED_APPSに設定する
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
将模型的更改进行反映。
运行以下代码可以将Django的更改保存为迁移形式。
python manage.py makemigrations polls
- マイグレーション:Djangoがモデル(データベーススキーマ)の変更を保存する方法。
python manage.py check
确认项目是否存在问题的命令。
当创建了模型的表后,再次执行迁移操作即可将模型的表创建到数据库中。
进行模型更改的三个步骤
-
- モデルを変更する
-
- マイグレーション作成のためにpython manage.py makemigrationsを実行
- データベースにこれらの変更を適用するためpython manage.py migrateを実行
为什么创建和应用迁移命令是分开的?
-
- マイグレーションをバリデーション管理システムにコミットしアプリとともに配布するため
-
- 開発の容易化
- ほかの開発者や本番環境にとって使いやすいものになるため
提升数据库API的便利性
如果在shell中执行Question.objects.all(),将会输出以下结果:
]>
在这个输出中无法了解数据库表的情况。
为此,将`str’方法添加到Question和Choice两个类中。
from django.db import models
class Question(models.Model):
# ...
def __str__(self):
return self.question_text
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
-
- シェルでの表示の利便性以外にもdjangoの自動生成adminのオブジェクトの表現として使用される
- そのためstr()メソッドをモデルに追加することは重要
from django.db import models
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
创建管理用户
python manage.py createsuperuser
在管理员权限下可以进行编辑
from django.contrib import admin
from .models import Question
admin.site.register(Question)