Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Django】簡単なSNSアプリを開発する② ~モデルの作成、管理画面~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20211205071412p:plain

おはようございます。Shotaです。

今回も、前回に引き続きDjangoSNSアプリの開発方法について解説していきます。

今回の記事では、投稿内容のモデルを作成していきます。

▼前回の記事はコチラ

shotanukumizu-1000.hatenablog.com



プロジェクト本体のurls.pyへの追記

Djangoのプロジェクト本体を機能させるために、_project/urls.pyで以下のコードを書いてください。

#_project/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls), #管理サイトへのアクセス
    path('mdeditor/', include('mdeditor.urls')) #Markdownエディタを実装するため
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

軽く、こちらのコードについて説明していきます。

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

こちらのコードは、画像や写真をアップロードする際に必要です。_project/urls.pyで設定してある変数urlpatternsに画像にアクセスする際のurlをここで予め設定しておきましょう。(設定しておかないとエラーが発生します)


モデルの作成

_app/models.pyで以下のコードを書いてください。

#_app/models.py
from django.db import models
from mdeditor.fields import MDTextField

TITLE_CHOICES = (
    ('danger', '重要'),
    ('warning', '連絡'),
    ('info', 'イベント'),
    ('success', 'その他'),
)

class ArticleModel(models.Model):
    name = models.CharField(max_length=70)
    tag = models.CharField(max_length=50, choices=TITLE_CHOICES)
    title = models.CharField(max_length=100)

    content = MDTextField()
    image = models.ImageField(upload_to='')
    created_at = models.DateField(verbose_name='作成日', auto_now=True)

    def __str__(self):
        return self.title

上記のコードで設定しているモデルは以下のとおりです。

  • 名前:70文字以内

  • タグ:定数TITLE_CHOICESで予め選択肢を用意して、「重要」、「連絡」、「イベント」、「その他」のうちから一つ選択させる

  • タイトル:100文字以内

  • 投稿内容:Markdown形式で書かせる。文字数の制限なし

  • 画像:画像をアップロードさせる。

  • 投稿日時:投稿が作成されると同時に、作成された日付を自動で設定する


追加で、以下のコードについて軽く説明しておきます。

def __str__(self):
     return self.title

これは管理サイトにアクセスする際に投稿内容のタイトルを表示させるためのものです。

あとはモデルの内容をデータベースに反映させましょう。以下のコードを書いてください。

$ python manage.py makemigrations
$ python manage.py migrate

このコマンドを実行すると、以下のようなファイル(_app/migrations/0001_initial.py)が出力されています。

# _app/migrations/0001_initial.py

from django.db import migrations, models
import mdeditor.fields


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='ArticleModel',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=70)),
                ('title', models.CharField(choices=[('danger', '重要'), ('warning', '連絡'), ('info', 'イベント'), ('success', 'その他')], max_length=100)),
                ('content', mdeditor.fields.MDTextField()),
                ('created_at', models.DateField(auto_now=True, verbose_name='作成日')),
            ],
        ),
    ]

このようなファイルが出力されていたら、モデルの完成です。


管理画面にモデルを登録

_app/admin.pyにアクセスして、以下のコードを書いてください。

#_app/admin.py
from django.contrib import admin
from .models import ArticleModel

admin.site.register(ArticleModel)

これで_app/models.pyで書いたArticleModelDjangoの管理サイトに反映できます。


管理画面にログイン

以下のコマンドを入力して、127.0.0.1:8000/adminにアクセスし、ログインしてください。そうすればDjangoの管理サイトにアクセスできます。(下記の画像参照)

$ python manage.py runserver

f:id:ShotaNukumizu_1000:20211213080007p:plain

こちらのサイトにアクセスできれば、適当にモデルを作成してください。(下記の画像参照)

f:id:ShotaNukumizu_1000:20211213080053p:plain


おわりに

今回の記事では、Djangoでモデルの作成, 管理画面へのアクセスについて詳細に解説しました。

次回の記事では、Djangoのルーティング設定について詳細に解説していきます。