LoginSignup
2
1

More than 5 years have passed since last update.

Django-materialを使って今風のサイトを作る

Last updated at Posted at 2018-08-09

記事のソースです。
git: ajitama/material_site
荒削りですがgitでソースコードを出してみました。
なるべくシンプルに書いてますが、素人レベルなので無駄なものについてはご容赦ください。

Ubuntu1804LTS
Python3.6.5
Django2.0.7

material_site
├── ajitama
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db20.sqlite3
├── manage.py
└── material_site
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

Djangoプロジェクトの作成


django-admin startproject material_site

まずはSettings.pyをいじります。
ざっくりと。

material_site/settings.py

import django #DBの名前を変更するために入れてます(場合によっては不要)

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
・・・<省略
    # material apps
    'material',
    'material.frontend',

    # userapp
    'ajitama.apps.AjitamaConfig', #<後で作ります>

・・・<省略
]

TEMPLATES = [
    {
・・・<省略
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'material.frontend.context_processors.modules',  # <←追加>
            ],
        },
    },
]


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db{}{}.sqlite3'.format(*django.VERSION[:2])), # DBの名前の変更。(好みです)
    }
}

AUTH_PASSWORD_VALIDATORSは削除してます。(パスワードの制約などを厳しくしてくれるモジュール)

material_site/url.py

from django.contrib import admin
from django.conf.urls import url
from django.urls import path, include
from material.frontend import urls as frontend_urls


urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'', include(frontend_urls)), #追加
    ]

管理ユーザの作成

先につくっときます
python3 manage.py createsuperuser

自分はadmin/adminで作りました。

初回のMigrate

migrateしないとアプリが作れません。
python3 manage.py migrate

/root/material_site# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, frontend, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying frontend.0001_initial... OK
  Applying frontend.0002_i18n... OK
  Applying sessions.0001_initial... OK

アプリケーションの作成

python3 manage.py startapp ajitama

アプリケーションの設定

ajitama/apps.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.apps import AppConfig
from material.frontend.apps import ModuleMixin


class AjitamaConfig(ModuleMixin, AppConfig):
    name = 'ajitama'
    icon = '<i class="material-icons">extension</i>'

ModuleMixinはmaterial frontendの機能で、URLをいい感じに取り込んでくれるものみたいです。

ajitama/models.py
from django.db import models

SELECT_LABEL=(
    ('OBJ1', '選択肢1'),
    ('OBJ2', '選択肢2'),
    ('OBJ3', '選択肢3'),
        )

# Create your models here.
class Article(models.Model):
    subject = models.CharField(
            "タイトル",
            max_length=90,
    )
    data_str = models.CharField(
            "データ(文字型)",
            max_length=10000,
            null=True,
            )
#<以下、省略>

ajitama/views.py
from material.frontend.views import ModelViewSet
from .import models

# Create your views here.
class ArticleViewSet(ModelViewSet):
    model = models.Article
    ordering = ['-subject', 'data_date']
    list_display = ('subject','data_date', 'data_bool','data_choice')

ajitama/urls.py
from django.urls import path, include
from django.conf.urls import url
from django.views import generic

from . import views

app_name = 'ajitama'

urlpatterns = [
    url('^$', generic.RedirectView.as_view(url='./ajitop'), name="index"),
    path('ajitop', include(views.ArticleViewSet().urls), name="top"),
]

Appのマイグレーション

# python3 manage.py makemigrations
Migrations for 'ajitama':
  ajitama/migrations/0001_initial.py
    - Create model Article
# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, ajitama, auth, contenttypes, frontend, sessions
Running migrations:
  Applying ajitama.0001_initial... OK 

実行してみる

Djangoを起動します

python3 manage.py runserver 0.0.0.0:8000

ブラウザでアクセスします。
http://127.0.0.1:8000/ajitama

image.png

作成したSuperuserでログインできるか試してみてください。

image.png

image.png

Djangoを使う人がもっとふえて、困ったときの情報がもっと出てくれることを祈ってます。

2
1
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
2
1