이번 포스팅에서는 Django에 데이터를 연동시키는 작업을 할 것입니다.
한증막.GG에서 사용한 데이터는 Steam(게임유통사이트)에서 추출한 데이터입니다.(2018년 4월 기준)
아래 데이터를 받아서 진행해주시기 바랍니다.
■ 보유한 데이터 설명
- pc_requirements_minumum과 pc_requirements_recommended에서 null값은 not_supported로 치환하였습니다.
- steam_appid는 게임상세정보페이지에서 steam사이트를 클릭했을때 해당게임페이지로 바로가는데에 활용되는 데이터입니다.
- released_date_1은 게임이 공게된 날짜이며 대부분은 Apr 20, 2020 이런형식으로 되어있습니다.
- price1부터 price5까지는 게임유통사이트5개를 가정하여 임의로 유통사마다 가격을 넣은것입니다.(추후 실시간으로 가격이 연동되면 필요가 없어지는 데이터입니다.)
- price는 10000원부터 100000만원 사이로 설정되어 있습니다.(100원단위 반올림되어있습니다.)
- price에서 0이 삽입되어 있는데 이것은 해당 유통사이트에 해당게임이 없을 수 있는 것을 가정해 놓은것입니다.
- 예를들어, A게임의 price1가 0이라면 price1을 가진 유통사이트에는 해당게임이 없다는 의미이며, 게임상세정보에서 나타나지 않으며, 최저가를 산정할때도 포함되지 않게 할 것입니다.
■ 보유한 게임데이터를 Django에 연동
Django terminal에서 jupyter notebook 을 입력해서 jupyter notebook로 들어가고 shell.ipynb를 만듭니다.
먼저 장고에서 jupyter notebook를 적용을 시키는 코드를 입력해야합니다.
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings'
os.environ['DJANGO_ALLOW_ASYNC_UNSAFE'] = 'true'
import django
django.setup()
다음으로 Game model을 import하고 데이터(steam_sample를 불러옵니다.) 그리고 csv.reader 형식으로 변형합니다.
import csv
from game.models import Game
hand = open('steam_sample.csv','rt',encoding='UTF8')
reader = csv.reader(hand)
print(reader)
이제 bulk_list라는 빈리스트를 만들고 데이터를 리스트에 넣습니다.
여기서 try, except 구문을 쓴 이유는 release_at데이터에서 간혹 '%b %d, %Y형식이 아니라, 'release soon', 'spring 2018' 같이 형식이 다른 데이터가 몇개 있기 때문에 이 데이터들을 걸러내기 위한 구문입니다.
또한 index가 1부터 시작하는 이유는 steam_sample데이터를 만들때 맨앞column에 unnamed라는 필요없는 데이터가 자동으로 삽입되었기 때문입니다. ㅠㅠ
bulk_list = []
import datetime
cnt = 0
for idx, row in enumerate(reader):
if idx==0:
continue
try:
bulk_list.append(Game(app_id = row[1],
title=row[2],
developer=row[3],
genre=row[4],
release_at = datetime.datetime.strptime(row[5], '%b %d, %Y'),
info=row[6],
pc_requirements_minimum = row[7],
pc_requirements_recommended = row[8],
steam = row[9],
origin = row[10],
uplay = row[11],
epic_games = row[12],
drmfree = row[13]
))
except Exception as e:
print(e)
cnt+=1
continue
이제 다음과 같은 코드를 입력하여 Django에 데이터를 적용시킵니다.
Game.objects.bulk_create(bulk_list)
Sqlite에서 다음과 같이 데이터가 삽입된 것을 확인할 수 있습니다.
■ 장르데이터를 Django에 연동
게임등록을 할때 장르리스트를 가지고 온것을 기억하실겁니다. 데이터 연동할 때 장르까지 같이 연동해줍니다.
(장고 안에서 장르를 입력해주어도 괜찮으나, 장르 개수가 많아지는 경우를 가정하여 데이터를 연동시키겟습니다.)
방식은 게임데이터를 연동할때와 같습니다.
## 장르
import csv
from game.models import Genre_list
kk = ['Adventure', 'Casual', 'Indie', 'RPG', 'Early Access', 'Violent', 'Gore', 'Free to Play', 'Strategy', 'Simulation', 'Action', 'Sports', 'Massively Multiplayer', 'Racing', 'Sexual Content', 'Nudity']
genre_list = []
for i in kk:
genre_list.append(Genre_list(genre_list = i))
Genre_list.objects.bulk_create(genre_list)
Sqlite에서 장르리스트를 확인할 수 있습니다.
이제 모든 데이터가 연동되었습니다. 다음포스팅에서는 게임세부정보를 만드는 작업을 하겠습니다.
'자격증 & 문제풀이 > Django-Project' 카테고리의 다른 글
[Django] 게임 목록(검색, 필터, 가격필터 기능 및 페이징 기능 구현 그리고 최저가 기능 구현) (0) | 2020.07.20 |
---|---|
[Django] 게임세부정보(game_detail)[댓글, 좋아요 기능] (0) | 2020.07.20 |
[Django] Game Update와 Delete (0) | 2020.07.19 |
[Django] Game Model과 Game 등록(create) (0) | 2020.07.19 |
[Django] Base.html (0) | 2020.07.19 |