9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Django2.0でブログの作成(その1)

Last updated at Posted at 2018-10-09

djangogirlsをさらに簡略化してまとめ、ちょっと要素を付加したものです。

目次

仮想環境

  • 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の編集

※該当箇所のみ変更すること

mysite/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 作成

blog/modesl.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はセットで行う!

ユーザーを作る

blog/admin.py
from django.contrib import admin
from .models import Post

admin.site.register(Post)

これを作ってから、ターミナルでスーパーユーザーをつくる。
python manage.py createsuperuser

  • usename
  • e-mail
  • 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

blog/views.py
from django.shortcuts import render

def post_list(request):
    return render(request, 'blog/post_list.html', {})

2.urls.py

初回は必ず親のurls.pyをかえる!

mysite/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は変える!(最初は自動で作られたりしないから、手動で作る)

blog/urls.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
を作る

post_list.html
<html>
    <head>
        <title>Ola's blog</title>
    </head>
    <body>
        <p>Hi there!</p>
        <p>It works!</p>
    </body>
</html>
9
7
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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?