Django学習日記(2021/12/11-2021/12/17)

2021/12/11

  • Just PythonのDocumentのModelsの基本読了
  • 以下メモ
  • – status = models.PositiveSmallIntegerField(default=1, verbose_name=”公開ステータス”, help_text=”1:下書き 2:公開 3:削除”, validators=[MinValueValidator(1), MaxValueValidator(2)])
  • – from django.core.validators import MaxValueValidator, MinValueValidator
  • – require_authentication = models.BooleanField(default=False, varbose_name=”ログインフラグ”, help_text=”Trueの場合ログインしているユーザーしか閲覧できない” )
  • def Meta:
    db_table = “category”
    verbose_name_plural = “記事カテゴリ”
  • df __str__(self):
    return self.title
  • df status2text(self):
    status2text = {1:”下書き” 2:”公開” 3:”削除”}
    return status2text[self.status]
  • statusが3のデータは削除としています。
  • 実際にデータを削除せず、statusを3に変えることで削除されたデータとして扱うすることで、何かあったときでもデータを復元することが可能になる
  • モデルで扱う数値データは、フロントエンドでの取り扱いも考えて文字列に変換するメソッドを定義しておくと良い
  • require_authenticationのようにモデル内でユーザーのログイン状態に応じたルールを基底しておくのも1つの方法
    デコレーターとどちらを用いるべきかは用検討
  • on_delete= models.CASCADE, models.SET_NULL, models.PROTECT
  • データに対する処理を行う際の推奨順は、models.py>views.py>templates
    APIで持ってきたデータはviews.pyなどで処理
    models.pyで処理しておくことで、views.pyでは関数を呼び出すだけで良くなったり、1から何度も記述しなく済むので便利
  • raise Exception(“例外警告”)
    他の例外処理でよく用いられるものは何か
  • def save(self, *args, **kwargs):でオーバーライド
    return super().save(*args, **kwargs)
  • (self, *args, **kwargs)が何を表しているのか
    self以外に渡された引数のうち、位置引数は変数argsにタプルで受け取り、キーワード引数は変数kwargsに辞書として受け取る
  • super()の部分では、Articleクラスのsaveメソッドを呼び出し、引数には受け取った引数をそのまま渡している。
    super().saveと親クラスmodes.Modelのsaveメソッドを呼び出しているのがポイント
    self.saveとは異なっていると思われる。super()が何を指すのか後できちんと確認
  • file = models.FileField(upload_to=’contents/file’)
    image = models.ImageField(upload_to=’contents/image’)
    このアップロード先をその内に変えていかなければならなそう。
  • category = models.ForeignKey(Category, on_delete=models.CASCADE)
    ForeignKeyは多対1の関係を作るため、Articleに対してCategoryは1つ、Categoryに対するArticleは複数。
    タグのように多対多の関係を作るにはどうしらよいのか調べる
  • テーブルに新しくフィールドを追加する場合はnull=Trueを指定。
    しかし、これが良い方法なのか不明なのと、テーブルの更新がきちんとできるか後で確認
  • OneToOneField, ManyToManyFieldの使い方は?
  • Just PythonのDocumentのチュートリアルの読了
  • STATIC_URL, STATIC_ROOT(collectstaticを行なった際の場所指定)
  • STATICFILES_DIRS = [ os.path.join(BASE_DIR, ‘static/’) ]
  • staticファイルの場所指定について詳細確認
  • templates/app_name/htmlファイル
  • プロジェクトのurls.pyにて
    from django.conf import settings
    from django.conf.urls.static import static
    urlpatterns + static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • static()の動きを理解する必要
  • projectFile/static/assets/css, js, img
  • Just PythonのDocumentのORMとクエリの読了
  • article.save() Article.create()
  • article = Article.objects.get(id=5)
  • Article.objects.filter(id=5).update(is_published=False)
    filterの場合は複数の該当データの更新がされてしまうので注意
  • データを書き換えてsaveするより.update()する方が早い
  • delete()

2021/12/12

  • さぼり

2021/12/13

2021/12/14

  • さぼり

2021/12/15

2021/12/16

2021/12/17

  • データベースの種類
    Oracle Database、Microsoft SQL Server、PostgreSQL、MySQLなど