PythonのDjangoフレームワークをローカル環境にセットアップする手順
1. 仮想環境の作成: 以下のコマンドを実行して仮想環境を作成
python3 -m venv myenv
2. 仮想環境の有効化: 以下のコマンドで仮想環境を有効にする
(管理人はMacを使用)
source myenv/bin/activate
3. Djangoのインストール: 以下のコマンドでDjangoをインストールする
pip install django
4. 新しいDjangoプロジェクトの作成: 以下のコマンドを実行して新しいDjangoプロジェクトを作成する
django-admin startproject myproject
5. サーバーの起動: 以下のコマンドを実行してDjango開発サーバーを起動
cd myproject
python manage.py runserver
サーバーが起動すると、ブラウザでhttp://127.0.0.1:8000/
にアクセスするとDjangoのウェルカムページが表示される。
6. アプリケーションを作成
新たなアプリケーションを作成する際には、ルートディレクトリ(manage.py
が存在するディレクトリ)で以下のコメントを実行する。
python manage.py startapp [appname]
上記コマンドにより、新しいアプリケーションディレクトリが作成され、その中には必要なファイル(models.py
など)が自動的に生成される。
Djangoのプロジェクト構造
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
myapp/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
- myprojectディレクトリ: プロジェクトのルートディレクトリで、
manage.py
というPythonスクリプトを含む。manage.py
はDjangoのコマンドラインユーティリティで、python manage.py [command]
の形式で使用する。 - myappディレクトリ: アプリケーションディレクトリ。
models.py
にモデルを定義。
モデル定義
簡単な掲示板アプリを実装する想定で以下の機能を実装する。
- 投稿の表示
- 掲示板への投稿
- 投稿へのコメントやいいね機能
Postモデル(投稿)
- title: タイトル(CharField)
- content: 内容(TextField)
- gender: 性別(CharField)
- age: 年齢(IntegerField)
- industry: 業界(CharField)
- profession: 職種(CharField)
- created_at: 作成日時(DateTimeField)
- likes: いいねの数(IntegerField)
Commentモデル(コメント)
- post: 関連する投稿(ForeignKey: Post)
- name: 名前(TextField)
- content: 内容(TextField)
- created_at: 作成日時(DateTimeField)
上記のモデルを適用するために、models.py
ファイルに下記のように記述する。
from django.db import models
class Post(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
title = models.CharField(max_length=200)
content = models.TextField()
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
age = models.IntegerField()
industry = models.CharField(max_length=200)
profession = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
likes = models.IntegerField(default=0)
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Like(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
変更を適用するには、マイグレーションを実行する。
python manage.py makemigrations
python manage.py migrate
ビュー実装
投稿一覧を表示するためのビューをmyapp/views.py
に作成する。
from django.shortcuts import render
from .models import Post
def index(request):
posts = Post.objects.all()
return render(request, 'index.html', {'posts': posts})
def create_post(request):
return render(request, 'create_post.html')
ビュー関数内でrender
関数を使うことで、テンプレートにデータを渡し、その結果をHTTPレスポンスとして返すことができる。
次に、これらのビューを使用するためにURLパターンをmyapp/urls.py
に設定。このファイルがまだ存在しない場合は新たに作成する。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('create_post', views.create_post, name='create_post'),
]
次に、投稿一覧ページと投稿作成ページのテンプレートを作成する。
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<nav>
<a href="{% url 'create_post' %}">New Post</a>
</nav>
{% for post in posts %}
<div>
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
</div>
{% endfor %}
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Create Post</title>
</head>
<body>
<h1>Create Post</h1>
<!-- ここに投稿作成フォームを表示します -->
</body>
</html>
テンプレート内では{% for %}
タグを使ってリストの各要素を繰り返し表示することや、{% url %}
タグを使ってURLパターンの名前からURLを生成する
コメント