djangogirlsをさらに簡略化してまとめ、ちょっと要素を付加したものです。
目次
- Django2.0でブログの作成(その1)
- Django2.0でブログの作成(その2:タイトルと本文の表示)
- Django2.0でブログの作成(その3:記事表示ページ)
- Django2.0でブログの作成(その4:記事へのコメント)
- Django2.0でブログの作成(その5:コメントを削除)
- Django2.0でブログの作成(その6:記事の作成)
- Django2.0でブログの作成(その7:記事の編集)
- Django2.0でブログの作成(その8:記事の削除)
- Django2.0でブログの作成(その9:記事の検索)
- Django2.0でブログの作成(その10:ユーザーログインページ)
仮想環境
- virtualenv使用
- django2.0を入れる
準備
- プロジェクトの作成
- アプリの作成
- 基礎となるsetting.pyの編集
まずは、mkdir hogeproject
任意の名前でファイルを作って、その中に移動する
cd hogeprogect
1.プロジェクト(mysite)の作成
django-admin startproject mysite .
ピリオドがないと、mysiteの中にmysiteが作られてしまう。
その場合はmkdirhogeprojectをせずにやればよい。
mysiteは任意の名前で良い。
2.アプリ(blog)の作成
python manage.py startapp blog
blogは任意の名前で良い。
3.setting.pyの編集
※該当箇所のみ変更すること
(略)
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
(略)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog' #アプリ名を追加
]
(略)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
(略)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static') #画像などに使用するstaticfileの追加
DB作成
- models.py or forms.py 作成
- makemigrations
- migrate
この順番は鉄則!
1.models.py 作成
from django.db import models
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
live = models.BooleanField(default=False)
class Meta:
ordering = ['-created_date']
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
標準で __str__(self)
が返る。
今回は何もしなければtitleが返る。
class Meta:はデフォルト設定。
created_dateにマイナスが付いているので、順番が逆になる。
つまり最新のものが上に来る。という設定のこと。
2.makemigrations
python manage.py makemigrations blog
blogはアプリ名を入れる
これでまずはデータベースを更新するための.pyファイルを作る。
3.migrate
python manage.py migrate
or
python manage.py migrate blog
blogはアプリ名を入れる
先ほど作成された.pyファイルを使用して、データベースを更新する。
※makemigrations→migrateはセットで行う!
ユーザーを作る
from django.contrib import admin
from .models import Post
admin.site.register(Post)
これを作ってから、ターミナルでスーパーユーザーをつくる。
python manage.py createsuperuser
- usename
- password(半角英数混在8文字以上)
- password(確認)
これでスーパーユーザーが作れるので
localhost:8000/adminにアクセスしてログインしてみる。
できたらいくつかPostを追加しておこう。
ページを作る
とりあえず何事も以下の通り行う。
その2〜必ず全て(例外もありますが)views→urls→htmlとやっていきます。
正確には、順番は関係ありません。
この3つの要素全てを変更すればOKです。(たまにmodelsやformsやadminも追加したり変更したりする)
今回はわかりやすいように、全てviews→urls→htmlの順番で行います。
- ①views.py
- ②urls.py
- ③html作成
1.views.py
from django.shortcuts import render
def post_list(request):
return render(request, 'blog/post_list.html', {})
2.urls.py
初回は必ず親のurls.pyをかえる!
from django.contrib import admin
from django.urls import path, include #include追加
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), #この行追加
]
これで、子/urls.pyをincludeしている。
毎回子のurl.pyは変える!(最初は自動で作られたりしないから、手動で作る)
from django.urls import path
from . import views
app_name = 'blog' #django2.0から必要になったnamespace定義
urlpatterns = [
path('', views.post_list, name='post_list'),
]
3.html作成
templates/blog/post_list.html
を作る
<html>
<head>
<title>Ola's blog</title>
</head>
<body>
<p>Hi there!</p>
<p>It works!</p>
</body>
</html>