Help us understand the problem. What is going on with this article?

League of Legendsのデータを使ったWEBアプリを作りたい①

Djangoを使ってLOLのデータ収集WEBアプリを作成したい

前回までで一応データの取り出し方とデータベースに保存する方法を学習することができたので、今回のパートからwebアプリの開発をしていきたいと思います。

前回まで、
League of Legendsのデータ取得してみたい①
League of Legendsのデータ取得してみたい②
League of Legendsのデータ取得してみたい③

環境

2020/2/8現在
OS:windows10
Anaconda:4.8.1
python:3.7.6
MySQL:8.0.19
Django:3.0.1
PyMySQL:0.9.3

Djangoの導入

インストール

python -m pip install djangoを実行

前回との変更

importするライブラリをMySQLdbからPyMySQLに変更
python -m pip install pymysql
import mysql -> import pymysql

作成

初めに、APPというディレクトリ上でdjango-admin startproject MyProjectを実行します。
image.png
このような階層が出来上がります。
manage.pyと同じ階層でpython manage.py startapp LOLAppを実行。
image.png
このようなものが出来上がります。

setting.py変更

INSTALLED_APPS'LOLApp.apps.LolappConfig',を追加。
次に、DATABASESを変更します。defaultでデータベースがsqlite3になっているのでそれをmysqlにします。

元のコード
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}
変更後
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'LOLdb',
        'USER': 'root',
        'PASSWORD': '{最初に設定したパスワード}',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS':{
            'init_command': "SET 
            sql_mode='STRICT_TRANS_TABLES'",
        }
    }
}

次に、LANGUAGE_CODE'en-us'から'ja'に変更。
最後に、TIME_ZONE'UTC'から'Asia/Tokyo'に変更。

manage.pyを変更

一番最後に

import pymysql

pymysql.install_as_MySQLdb

を追加。

python manage.py makemigrations LOLAppを実行
python manage.py migrateを実行
image.png
前回作ったmatch_dataというテーブルのほかに新しいものが作成されます。

開発用サーバーを起動

python manage.py runserverを実行して出力されたアドレスに飛んでみます。
image.png
このような画面が出たらとりあえずは成功です。

ビューの作成

views.py
from django.shortcuts import render
from django.http import HttpResponse #追加
# Create your views here.

def index(request):
    return HttpResponse("Hello World!")

LOLAppの直下にurls.pyを作成します。
さっきのビューに対応するパスを与えます。

LOLApp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('',views.index,name='index'),
]

MyProject直下のurls.pyにも変更を加えます。

MyProject/urls.py
from django.contrib import admin
from django.urls import path,include #includeを追加

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

python manage.py runserverを実行して、さっきのアドレスに/LOLAppを追加してアクセスすると、
image.png
となっていればとりあえずOK。

モデルを作成

models.py
from django.db import models

# Create your models here.
class Match_data(models.Model):
    sn = models.CharField(max_length=200)
    kills = models.IntegerField(default=0)
    deaths = models.IntegerField(default=0)
    assists = models.IntegerField(default=0)
    championId = models.IntegerField(default=0)
    roles = models.CharField(max_length=200)
    cs = models.IntegerField(default=0)
    gold = models.IntegerField(default=0)
    damage = models.IntegerField(default=0)
    side = models.CharField(max_length=200)
    game_time = models.IntegerField(default=0)

python manage.py makemigrations LOLApp
python manage.py migrate
python manage.py sqlmigrate LOLApp 0001
image.png
テーブルにlolapp_match_dataが新しく追加される。

python manage.py shellを実行して実際に試してみる。

from LOLApp.models import Match_data 
Match_data.objects.all()
# <QuerySet []>
a = Match_data(sn="aaa",kills=2,deaths=3,assists=5,championId=100,roles="MID",cs=100,gold=10000,damage=10000,side="BLUE",game_time=1500)
a.save() #データを保存
a
#<Match_data: Match_data object (1)>

MySQLのコマンドで確かめてみると
image.png
データベースに保存されていることが確認できた。

管理アカウントの作成

python manage.py createsuperuserを実行してユーザー名、メールアドレス、パスワードを登録します。
その後、python manage.py runseverを実行してhttp://127.0.0.1:8000/admin/に移動すると管理サイトに飛ぶことができます。この管理サイトでモデルを操作するために、admin.pyを変更します。

admin.py
from django.contrib import admin
from .models import Match_data

# Register your models here.
admin.site.register(Match_data)

これを追加してから再読み込みをするとimage.png
モデルが追加され、image.png
この画面でデータを操作することができます。

まとめ

今回は前の項目でデータを取得したものをフレームワークを使って、少し改変してみました。次は、WEBアプリを作るためには表示させるベースを作らないといけないのでそっちを少し作りたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした