从零开始的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)
广告
将在 10 秒后关闭
bannerAds