从零开始的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)