Django入門ブログ構築 まとめ
プロジェクトの作成
django-admin startproject [プロジェクト名]
※ 作成されるフォルダ構成
[プロジェクト名]/settings.py
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','widget_tweaks',# 'app',# 'accounts',# 'django.contrib.sites',# 'allauth',# 'allauth.account',# 'allauth.socialaccount',]
LANGUAGE_CODE = 'ja'TIME_ZONE = 'Asia/Tokyo'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True
STATIC_URL = '/static/'SITE_ID = 1LOGIN_REDIRECT = '/'ACCOUNT_LOGOUT_URL = '/'ACCOUNT_EMAIL_VERIFICATION = 'none'
[プロジェクト名]/urls.py
urlpatterns = [path('admin/', admin.site.urls),# path('', include('app.urls')),# path('accounts/', include('accounts.urls')),# path('accounts/', include('allauth.urls')),]
アプリの作成
python manage.py startapp [アプリケーション名] ※作られたフォルダに移動したうえで実行
※アプリケーション名の設定(settings.py , urls.py)を先に作っておくとエラーになる?
settings.py への追記
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks',
'app',
# 'accounts',
# 'django.contrib.sites',
# 'allauth',
# 'allauth.account',
# 'allauth.socialaccount',
]
models.py
from unittest.util import _MAX_LENGTH
from django.db import models
from django.conf import settings
from django.utils import timezone
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField("タイトル", max_length=200)
content = models.TextField("本文")
created = models.DateTimeField("作成日", default=timezone.now)
def __str__(self):
return self.title
admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
マイグレーションファイルの作成
ターミナルで
python manage.py makemigrations
結果
マイグレーションの実行
python manage.py migrate
管理ユーザーの作成
python manage.py createsuperuser
- ユーザー名、メールアドレス、パスワードの設定をする
- パスワードは英数八文字以上
サーバーの立ち上げ
python manage.py runserver
http://127.0.0.1:8000/admin からユーザー名とパスワードでログイン
ルーティング
[プロジェクト名]/urls.py への追記
"""blog02 URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls')),
# path('accounts/', include('accounts.urls')),
# path('accounts/', include('allauth.urls')),
]
app/urls.py の作成
from django.urls import path
from app import views
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
フォームの作成
app/forms.py の作成
from cProfile import label
from socket import fromshare
from django import forms
class PostForm(forms.Form):
title = forms.CharField( max_length=30, label='タイトル')
content = forms.CharField(label='内容', widget=forms.Textarea())
Viewの作成
app/views.py
from django.shortcuts import render
from django.views.generic import View
from .models import Post
class IndexView(View):
def get(self, request, *args, **kwargs):
post_data = Post.objects.order_by('-id')
return render(request, 'app/index.html',{
'post_data':post_data
})
テンプレートの作成
app/template/base.py
- 言語を”ja"に
- タイトルを設定
- ブートストラップ公式からリンクを張り付ける
{% load static %}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<title>ブログチュートリアル</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a href="/" class="navbar-brand">ブログ</a>
<ul class="navbar ml-auto">
<li class="nav-item">
<a href="/" class="nav-link">ホーム</a>
{% if user.is_authenticated %}
<li class="nav-item">
<a href="" class="nav-link">投稿</a>
</li>
<li class="nav-item">
<a href="" class="nav-link">ログアウト</a>
</li>
{% else %}
<li class="nav-item">
<a href="" class="nav-link">サインアップ</a>
</li>
<li class="nav-item">
<a href="" class="nav-link">ログイン</a>
</li>
{% endif %}
</li>
</ul>
</div>
</nav>
<main>
<div class="container">
{% block content %}
{% endblock %}
</div>
</main>
<footer class="py-2 pg-dark">
<p class="m-0 text-center text-white">Copyright © Django Startup 2020</p>
</footer>
{% block extra_js %}
{% endblock %}
</body>
</html>
app/template/index.html
{% extends 'app/base.html' %}
{% block content %}
<div class="row my-4">
<div class="col-md-8">
{% for post in post_data %}
<div class="card mb-4">
<div class="card-body">
<h2 class="card-title">{{ post.title}}</h2>
<p class="card-text">{{ post.content|truncatechars:100 }}</p>
<div class="btn btn-warning">詳細</div>
</div>
<div class="card-footer text-muted">
{{ post.created|date}} by {{post.author}}
</div>
<a href="" class="stretched-link"></a>
</div>
{% endfor %}
</div>
<div class="col-md-4">
<div class="card">
<h5 class="ard-header">このチュートリアルについて</h5>
<div class="card-body">
<p>ステップ</p>
<p class="mb-0">
初めてDjanogを触る人向けのチュートリアルです。
最小限の機能を構築してDjangoを学習しましょう
</p>
</div>
</div>
</div>
</div>
{% endblock content %}
app/static/css/style.css
* {
margin: 0;
padding:0;
box-sizing: border-box;
}
body {
background: #f1f1f1;
display: flex;
flex-flow: column;
min-height: 100vh;
}
main {
flex: 1;
}

コメント
コメントを投稿