1.プロジェクトを作成します
django-admin startproject my_first_django # 创建一个名称为my_first_django的项目
コマンドの実行後、プロジェクト名とmanage.pyファイルを含むフォルダーが生成されます
manage.pyは、プロジェクトの管理ファイルです。
my_first_djangoの構造は次のとおりです。
Django開発の機能モジュールはアプリケーションによって実装されます
2.アプリケーションを作成します
python manage.py startapp booktest # 创建一个booktest的应用
アプリケーションを作成したら、登録する必要があります
my_first_djangoのsetting.pyファイルのINSTALLED_APPS構成アイテムを変更します。
djangoWebサービスを実行する
python manage.py runserver
ORM(Object-Relations-Mapping)の概要、DjangoにはデフォルトでORMフレームワークが組み込まれています
3.本のモデルを作成します
from django.db import models
# Create your models here.
# 设计和表对应的类 : 模型类
# 图书类
class BookInfo(models.Model):
"""
图书模型类
"""
bname = models.CharField(max_length=20)
bpub_data = models.DateField()
Djangoは、モデルクラスに従ってデータベースに対応するテーブルを作成します
モデルクラス生成テーブルは、次の2つのステップに分かれています。
1)移行ファイルを生成します
python manage.py makemigrations
2)移行を実行してテーブルを生成します
python manage.py migrate
データベースに作成されるテーブル名の形式は次のとおりです。applicationname_modelclass小文字
この例の表示は「booktest_bookinfo」です。
4.モデルクラスを介してデータテーブルを操作します(追加、削除、変更、およびチェック)
1)記録を増やす
from booktest.models import BookInfo
from datetime import date
# 数据库中增加记录
# 1 实例化模型类
# 2 添加实例属性 实例属性的名称需要了模型类中的类属性名称一致
# 3 实例调用save()方法完成记录的插入
b = BookInfo()
b.bname = "天龙八部"
b.bpub_data = data(1990,1,1)
b.save()
2)クエリレコード
from booktest.models import BookInfo
# 查询记录的步骤:
# 1 调用模型类的objects.get()方法 参数为查询条件
# 2 接收1中的返回的结果,类型了模型类的一个实例
# 3 查看 2 中实例的属性即可
b2 = BookInfo.objects.get(bname="天龙八部")
print(b2.bname)
print(b2.bpub_data)
(3)変更記録
from booktest.models import BookInfo
# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 对其实例属性进行修改
# 3 调用save()方法
b3 = BookInfo.objects.get(bname="天龙八部")
b3.bname = "天龙八部2"
b3.save()
4)レコードを削除する
from booktest.models import BookInfo
# 修改记录的步骤:
# 1 先查询到要修改的记录,得到其实例
# 2 调用该实例的delete()方法
b4 = BookInfo.objects.get(bname="天龙八部2")
b4.delete()
5.1対多の関係を追加します
説明:ヒーロークラスを追加します。ヒーローには、名前、性別、最後通牒、および起源の本の属性があります。本の起源は、本のテーブルの外部キーです。ブックリストとヒーローリストは1対多の関係にあります。
1)ヒーローモデルクラスを作成する
from django.db import models
# Create your models here.
# 设计和表对应的类 : 模型类
# 图书类
class BookInfo(models.Model):
"""
图书模型类
"""
bname = models.CharField(max_length=20)
bpub_data = models.DateField()
# 英雄类
class HeroInfo(models.Model):
"""
英雄模型类
"""
h_name = models.CharField(max_length=20)
h_gender = models.BooleanField(default=False)
h_comment = models.CharField(max_length=128)
h_book = models.ForeignKey("BookInfo", on_delete=models.CASCADE)
その中で、models.ForeignKey( "BookInfo"、on_delete = models.CASCADE)の場合、最初のパラメーターは「one」から「many」の「one」のクラス名であり、2番目のパラメーターは「one」「Multiple」を削除する場合です。 「アプローチ。models.CASCADEは、「1つ」を削除すると、対応する「複数」の削除が行われることを示します(カスケード削除)。
on_deleteの可能な値は次のとおりです:
CASCADE
:これはデフォルトのオプションであるカスケード削除です。明示的に指定する必要はありません。PROTECT
:プロテクトモード。このオプションを使用すると、削除時にProtectedError
エラーがスローされます。SET_NULL
:空白モード。削除する場合、外部キーフィールドは空に設定されます。ただしblank=True, null=True
、フィールドが定義されている場合は、空にすることができます。SET_DEFAULT
:デフォルト値を設定します。削除する場合、外部キーフィールドはデフォルト値に設定されますので、外部キーを定義する際はデフォルト値の追加に注意してください。SET()
:値をカスタマイズします。もちろん、対応するエンティティのみにすることができます
2)移行ファイルを更新して実行します(3.1および3.2を参照)。
3)ヒーローレコードを追加する
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_first_django.settings") # my_first_django 项目名称
django.setup()
from booktest.models import BookInfo, HeroInfo
from datetime import date
b1 = BookInfo()
b1.bname = "天龙八部"
b1.bpub_data = date(1989, 10, 5)
b1.save()
b2 = BookInfo()
b2.bname = "神雕侠侣"
b2.bpub_data = date(1999, 1, 20)
b2.save()
h1 = HeroInfo()
h1.h_name = "乔峰"
h1.h_gender = False
h1.h_comment = "降龙十八掌"
# 注意 在添加英雄的h_book属性时类型为 BookInfo的实例
h1.h_book = b1
h1.save()
h2 = HeroInfo()
h2.h_name = "段誉"
h2.h_gender = False
h2.h_comment = "六脉神剑"
h2.h_book = b1
h2.save()
h3 = HeroInfo()
h3.h_name = "杨过"
h3.h_gender = False
h3.h_comment = "独臂神功"
h3.h_book = b2
h3.save()
h3 = HeroInfo()
h3.h_name = "小龙女"
h3.h_gender = True
h3.h_comment = "睡树枝"
h3.h_book = b2
h3.save()
booktest_heroinfoテーブルにh_book_idフィールドがあります。これは、class属性のh_bookに対応します。
4)主人公の本の属性を表示する
hero = HeroInfo.objects.get(h_name="小龙女")
print(hero.h_name)
print(hero.h_gender)
print(hero.h_book)
print(hero.h_book.bname)
print(hero.h_book_id)
5)特定のタイトルに対応するすべてのヒーローを表示する
# 查询书籍的对象
b1 = BookInfo.objects.get(bname="天龙八部")
print(b1.bname)
# 查询书籍对应的所有英雄 使用 b1.heroinfo_set.all() 返回的是一个列表,里面存放的是每个英雄的实例
for hero in b1.heroinfo_set.all():
print(hero.h_name)
print(hero.h_comment)
print()
6)クエリテーブルのすべてのコンテンツ
# 返回一个列表,列表里面是每本书的实例
BookInfo.objects.all()