knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

Django +mysql DB WEBアプリの実装


index:

概要

web フレームワークDjangoで、mysql 接続設定等をテスト

環境

python 3.5
Django 2.1.5

作成方法

・プロジェクトの作成

django-admin startproject mysite

django-admin が、実行できない場合は、pip パスを追加すると、実行できました。

python C:\Users\user1234\AppData\Local\Programs\Python\Python35\Lib\site-packages\django\bin\django-admin.py startproject mysite


=> プロジェクト内に、複数のアプリを
 追加できそうです。

・サーバ起動方法
python manage.py runserver

=> localhost:8000 で、開きました

・アプリを、プロジェクトに追加

python manage.py startapp test1

test1 を、追加。

・DB mysql の、設定。
mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'db_user',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',  # (デフォルトポートなら空でも可)
    }
}

DATABASES 部分を、
db name, user, pass ,host
等を記載します


・モデルの作成
test1/models.py

from django.db import models

# Create your models here.

#
class Book(models.Model):
    """書籍"""
    name = models.CharField('書籍名', max_length=255)
    publisher = models.CharField('出版社', max_length=255, blank=True)
    page = models.IntegerField('ページ数', blank=True, default=0)

    def __str__(self):
        return self.name


class Impression(models.Model):
    """感想"""
    book = models.ForeignKey(Book, verbose_name='書籍', related_name='impressions', on_delete=models.CASCADE)
    comment = models.TextField('コメント', blank=True)

    def __str__(self):
        return self.comment

・migrate
事前に、mysql DB, と上記の接続設定を
完了させておきます。


python manage.py makemigrations test1
python manage.py migrate

=> テーブルが、作成されます


・ルーティングの追加

test1/urls.py

#
from django.urls import path
from test1 import views

app_name = 'test1'
urlpatterns = [
    path('', views.index, name='index'),
    path('book/', views.book_list, name='book_list'),   # 一覧
    path('book/add/'              , views.book_edit, name='book_add'),  # 登録
    path('book/mod/<int:book_id>/', views.book_edit, name='book_mod'),  # 修正
    path('book/del/<int:book_id>/', views.book_del, name='book_del'),   # 削除
    #book_test
    path('book_test/', views.book_test, name='book_test'),
]

・次に、 
mysite/urls.py を、追加

from django.conf.urls import url, include
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('polls/', include('polls.urls')), 
    path('test1/', include('test1.urls')), 
    path('admin/', admin.site.urls),
]


test1/views.py

from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic.list import ListView

# Create your views here.
from django.http import HttpResponse
from django.template import loader
#
from test1.models import Book, Impression
from test1.forms import BookForm, ImpressionForm

#
def index(request):
    return HttpResponse('Hello World ,from test1')

#
def book_list(request):
    """書籍の一覧"""
#    return HttpResponse('書籍の一覧')
    books = Book.objects.all().order_by('id')
    return render(request,
                  'test1/book_list.html',     # 使用するテンプレート
                  {'books': books})         # テンプレートに渡すデータ
#

・表示の確認、

http://localhost:8000/test1/
を、開くと、追加した。ルーティングが
表示されます。

まとめ

次回は、機能を追加したいと思います