0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Djangoドキュメント作成1

Last updated at Posted at 2025-01-04

BBSのプロジェクト作成

この記事ではBBSのプロジェクト作成からデータの詳細表示まで取り扱っています

BBSのプロジェクト作成の前提となるMANPのわかりやすいダウンロード方法はこちら(https://qiita.com/ninja0408/items/e7a6d60a01d6d693aae9#2-1-mampとxampp)

新しいフォルダ作成後ターミナルで以下の二つを記述

django-admin startproject myapp .

この場合プロジェクト名はmyappとなる

python manage.py startapp bbs

これの場合はbbsがアプリ名となる。bbsフォルダが作成したフォルダ直下にあればOK
もしpythonでエラーが起きた場合python3で試してみよう
(python3を使った方は今後もpython3を使う)

スクリーンショット 2024-12-22 19.08.56.png

Hello Worldの表示

bbs > views.py
form django.shortcuts improt render  #これは初めから書いてある
from django.http import HttpResponse  #ここから下を書き込む

def index(request):
    return HttpResponse("Hello World")

ルーティングの設定

myapp > urls.py
from django.contrib import admin
from django.urls import include, path  #includeを追加する

urlpatterns = [
    path("bbs/",include("bbs.urls")),  #この1行を追加する
    path('admin/',admin.site.urls),
]

bbsフォルダにurls.pyファイルを作成

スクリーンショット 2024-12-19 14.25.23.png

作成したurls.pyに以下を記述

bbs > urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('',views.index,name='index'),
]

bbsアプリケーションを登録

myapp > settings.py
INSTALLESD_APPS = [
    'bbs.apps.BbsConfig',  #これを追加する
    'django.contrib.admin',
    'django.contrib.auth', ......

サーバー起動

ターミナルで以下を記述

python manage.py runserver

ブラウザで開きURLの末尾に「/bbs」を追加する

スクリーンショット 2024-12-19 15.10.25.png

呼び出すファイルを指定

bbs/views.pyを編集する(上記で書いていたコードを書き換える)

bbs > views.py
def index(request):
    return render(request,'bbs/index.html')

テンプレート作成

bbsフォルダにtemplatesフォルダを作成

スクリーンショット 2024-12-19 15.01.38.png

templatesフォルダの中にbbsフォルダを作成

スクリーンショット 2024-12-19 15.03.00.png

bbs/templates/bbsフォルダにindex.htmlファイルを作成

スクリーンショット 2024-12-19 15.12.46.png

index.htmlを編集

bbs > templates > bbs > index.html
<!DOCTYPE html>
<html lang="ja">  <!--langをjaに変える -->
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>bbs</title>  <!-- タイトルをbbsに変える -->
</head>
<body>
  <h1>Hello Django</h1>  <!-- この1行を追加する -->
</body>
</html>

確認

必要であればターミナルで

python manage.py runserver

もしエラー(Error: That port is already in use.)が出た場合ターミナルで

kill `lsof -ti tcp:8000`

を打ち込み、もう一度

python manage.py runserver

スクリーンショット 2024-12-19 15.23.06.png

辞書型でデータを渡す

bbs > views.py
def index(request):
    context = {'message':"Welcome my BBS"}  #この1行を追加する
    return render(request,'bbs/index.html',context)  #,contextを追加する

テンプレートで変数の表示

Jinja2の説明

動的なコンテンツを生成するためのテンプレートを使用して、HTMLなどの出力を生成するために使用されます。Jinja2は、これらのテンプレートを作成、編集、レンダリングするための強力なツール
HTMLのテンプレートを作ってWebページに表示させることができる

jinja2では{{ 変数名 }}とすることで値を表示できる

templates > bbs > index.html
<body>
    <h1>Hello Django</h1>
    <p>{{ message }}</p>
</body>

データの追加

bbs > views.py
def index(request):
    context = {'message':"Welcome my BBS",
            'members':["AAAさん","BBBさん","CCCさん"]  #この1行を追加する
            }
    return render(request,'bbs/index.html',context)

テンプレートで呼び出し

{% %}とすることで、テンプレートエンジン内でコードや制御フローを記述できる
これは通常、制御文やループ、条件分岐などのテンプレートロジックを埋め込むために使用される

templates/bbs/index.htmlを編集

bbs > templates > bbs > index.html
<body>
  <h1>Hello Django</h1>
  <p>{{ message }}</p>

  {% for member in members %}          #ここから
    <p>{{ member }}は一年生です。</p>
  {% endfor %}                         #ここまで追加する
</body>

Model

Modelは、データベースのテーブルに対応するPythonのクラス
Modelを作成することで、Pythonでデータベースのテーブル定義、データの追加・更新・削除、データを取得などができる

ORマッパー

オブジェクト指向プログラミングとリレーショナルデータベースの間のデータのマッピングを指します。ORマッパーは、プログラム内のオブジェクトとデータベースのテーブルとの間でデータのやり取りを簡素化し、効率化するためもの

bbs/models.pyの編集

bbs > models.py
from django.db import models

class Article(models.Model):                      #ここから
    content = models.CharField(max_length=200)

    def __str__(self):
        return self.content                       #ここまで追加する

マイグレーション(migration)

データベーススキーマ(テーブル、フィールド、制約など)を変更し、その変更をデータベースに適用するための仕組み。マイグレーションは、Djangoアプリケーションのモデルに変更を加えたり、新しいモデルを追加したりした場合に、データベーススキーマを同期させることができる

マイグレーションファイルの作成

ターミナルで

python manage.py makemigrations bbs

スクリーンショット 2024-12-19 15.55.27.png

DBに反映

ターミナルで

python manage.py migrate

スクリーンショット 2024-12-19 15.59.10.png

phpmyadminで確認

スクリーンショット 2024-12-19 16.00.32.png

管理サイト

Djangoの管理サイト(Admin Site)は、Djangoが提供する強力な管理ツール
これを使用することで、データベース内のデータを操作したり管理したりするためのWebベースのインターフェースを使用できる
管理サイトを利用することで、データベースの管理作業やコンテンツの編集を非常に効率的に行うことができる

superuserの作成

ターミナルで

python manage.py createsuperuser

username

スクリーンショット 2024-12-19 16.13.14.png

email

スクリーンショット 2024-12-19 16.19.02.png

password

パスワードは打ち込んだものが見えません。
確認用で2度打ち込む必要があります。
短すぎると「Bypass password validation and create user anyway?」という警告が出ます。良ければ「y」やり直すなら「N」を押しエンターを押すと完了です

サーバー起動

ターミナルで

python manage.py runserver

URL変更

http://127.0.0.1:8000/adminにすることで管理サイト画面に遷移します

決めたUsernameとpasswordを打ち込みログインします

Articleモデルを操作できるようにする

bbs/admin.pyの編集

bbs > admin.py
from django.contrib import admin
from .models import Article   #この行と下の行を追加する

admin.site.register(Article)

管理サイトをリロードすると以下のようにBBSのArticleが出てくる

スクリーンショット 2024-12-19 16.39.13.png

Articleテーブルにデータを追加

+Addをクリック
スクリーンショット 2024-12-19 16.42.18.png

Contentにテキストを入力
下のSAVEボタンを押す

3つ登録しましょう

スクリーンショット 2024-12-19 16.46.26.png

ArticleテーブルのContentカラムに3つデータが格納された

スクリーンショット 2024-12-19 16.48.49.png

プロジェクトのurls.pyでルーティング記述

myapp/urls.pyの編集

myapp > urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView  #この1行を追加する

urlpatterns = [
    path("bbs/",include("bbs.urls")),
    path('admin/',admin.site.urls),
    path('', RedirectView.as_view(url='bbs/')),   #この1行を追加する
]

views.pyでModelからデータを取り出す

bbs > views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Article   #この1行を追加する

def index(request):
    articles = Article.objects.all()   #この1行を追加する
    context = {'message': "Welcome my BBS",
                'articles': articles,   #この1行を追加する
                }           #memberは削除して良い
    return render(request, 'bbs/index.html', context)

テンプレートで表示

bbs > templates > bbs > index.html
<body>
  <h1>Hello Django</h1>
  <p>{{ message }}</p>

  {% for article in articles %}  <!-- forでまわしているところをmemberのところを変える -->
    <p>{{ article }}</p>
  {% endfor %}
</body>

ここまでできたらブラウザで確認(要更新)

スクリーンショット 2024-12-19 17.13.48.png

個別ページ

bbs/urls.pyの編集

bbs > urls.py
from django.urls import path
from . import views

app_name = 'bbs'   #この1行と追加する

urlpatterns = [
  path('', views.index, name='index'),
  path('<int:id>', views.detail, name='detail'),   #この1行を追加する
]

動作確認

bbs/views.pyの編集

bbs > views.py
from django.shortcuts import render,get_object_or_404   #renderより後を追加する
from django.http import HttpResponse
from .models import Article

def index(request):
    articles = Article.objects.all()
    context = {'message': "Welcome my BBS",
                'articles': articles,
                }
    return render(request, 'bbs/index.html', context)

def detail(request, id):     #これより下を追加する
    article = get_object_or_404(Article, pk=id)
    return HttpResponse(article)

動作確認

http://127.0.0.1:8000/bbs/1
http://127.0.0.1:8000/bbs/2
http://127.0.0.1:8000/bbs/4

contentで作成したデータが出てくればOK
ここでは3つしか作っていないため3つ目のURLではエラーが起きる

テンプレートから表示

bbs > views.py
def detail(request, id):
    article = get_object_or_404(Article, pk=id)
    context = {        #contextを新しく作る
        'message': 'ページID:'+ str(id),
        'article': article,
    }
    return render(request, 'bbs/detail.html', context)   #この1行を書き換える

テンプレート作成

detail.htmlの作成

bbs > templates > bbs > detail.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>bbs - {{ article.id }}</title>    <!-- titleを書き換える -->
</head>
<body>     <!-- bodyの中身を追加 -->
  <h1>Hello Django</h1>
  <p>{{ message }}</p>

  <p>{{ article.content }}</p>
  <p><a href='{% url "bbs:index" %}'>一覧に戻る</a></p>
</body>
</html>

確認

スクリーンショット 2024-12-22 18.53.11.png

一覧表示画面からも各ページに遷移

bbs > templates > bbs > index.html
<body>
  <h1>Hello Django</h1>
  <p>{{ message }}</p>

  {% for article in articles %}
    <p>{{ article }}
      <a href='{% url "bbs:detail" article.id %}'>詳細</a>   <!-- この1行を追加する -->bi
    </p>
  {% endfor %}
</body>

詳細ボタンが作られていればOK

スクリーンショット 2024-12-22 18.57.55.png

それぞれの詳細ボタンから個別のページに遷移できるか確認する

今回はこれで終わりです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?