0. 서론
어제는 원하는 사람의 닉네임과 태그를 입력하면 해당 계정의 솔로랭크 정보를 보여주도록 하였습니다.
이번에는 더 나아가서 내가 원하는 사람의 정보를 저장하고 후에 저장한 정보를 가지고 한번에 확인하도록 해보겠습니다.
일단은 간단하게 정보 받고 저장하는 방식만 적어볼려고 합니다.
Github
1. models.py
from django.db import models
class StreamerTier(models.Model):
streamer_name = models.CharField(max_length=100)
summoner_name = models.CharField(max_length=30)
tier = models.CharField(max_length=20)
rank = models.CharField(max_length=5)
league_points = models.IntegerField()
wins = models.IntegerField()
losses = models.IntegerField()
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.streamer_name} - {self.tier} {self.rank} ({self.summoner_name})"
# 일단 해당 소환사의 랭크 정보를 저장해야 하므로 model을 만들어줘야합니다.
# 방송인(혹은 저장하고싶은 유저)의 닉네임, 게임 닉네임 등과 같은 계정정보들을 모델로 지정해주었습니다.
# str 메서드를 통해 객체의 읽기 쉽도록합니다.
2. forms.py
from django import forms
class SummonerForm(forms.Form):
game_name = forms.CharField(label='소환사명', max_length=30)
tag_line = forms.CharField(label='태그라인', max_length=5, required=False)
class StreamerForm(forms.Form):
streamer_name = forms.CharField(label='스트리머 닉네임', max_length=100, required=True)
# 스트리머 닉네임을 저장할 폼을 추가해주었습니다.
3. views.py
@csrf_exempt
def save_streamer_tier(request):
if request.method == 'POST':
streamer_form = StreamerForm(request.POST)
if streamer_form.is_valid():
streamer_name = streamer_form.cleaned_data['streamer_name']
tier_info = request.session.get('tier_info')
summoner_name = request.session.get('summoner_name')
if tier_info and summoner_name:
streamer_tier = StreamerTier.objects.create(
streamer_name=streamer_name,
summoner_name=summoner_name,
tier=tier_info['tier'],
rank=tier_info['rank'],
league_points=tier_info['leaguePoints'],
wins=tier_info['wins'],
losses=tier_info['losses'],
)
return redirect('streamer_tier_list')
else:
error_message = "티어 정보를 저장할 수 없습니다."
return render(request, 'riot_api/error.html', {'error_message': error_message})
else:
error_message = "스트리머 닉네임을 입력해주세요."
return render(request, 'riot_api/error.html', {'error_message': error_message})
else:
return redirect('summoner_tier')
1) post 요청을 받으면 이 코드를 실행하도록 하였습니다.
2) StreamerForm 인스턴스를 생성하고 사용자가 제출한 데이터를 저장합니다.
3) 이 정보가 유효하다면 코드를 계속 진행합니다.
4) 폼에서 streamer_name 필드값을 가져옵니다.
5) 티어 정보와 닉네임을 가져옵니다.
6) models.py에서 지정한 모델의 인스턴스를 생성하고 데이터베이스에 아래 적은 정보들을 저장합니다.
7) 저장이 완료되면 저장된 정보를 보여주는 url로 redirect 하도록 합니다.
8) 유효하지 않는 경우 에러처리하도록 합니다.
def streamer_tier_list(request):
# 저장된 스트리머 티어 정보를 리스트로 보여주는 뷰
streamer_tiers = StreamerTier.objects.all()
return render(request, 'riot_api/streamer_tier_list.html', {'streamer_tiers': streamer_tiers})
# StreamerTier 모델의 모든 객체를 가져와서 이를 html을 랜더링하도록 합니다.
4. urls.py
from django.urls import path
from . import views
urlpatterns = [
path('summoner/', views.summoner_tier_view, name='summoner_tier'),
path('save_streamer_tier/', views.save_streamer_tier, name='save_streamer_tier'),
path('streamer_tiers/', views.streamer_tier_list, name='streamer_tier_list'),
]
# 검색한 소환사의 계정 정보를 저장할 url을 추가했습니다.
5. 결과

# 이렇게 전적을 검색하면 티어정보 저장버튼이 나오게 했으며 이를 클릭하며 해당 계정의 스트리머닉네임을 적도로하는 창을 생성하였습니다.
# 닉네임을 적고 저장을 누르면

# 이런식으로 저장하게 되었습니다.
6. 후기
일단은 의도했던 내가 저장하고싶은 스트리머(혹은 일반유저)의 전적을 저장하는 최소 기능만을 구현하였습니다.
앞으로 해 나가야 할 리스트
1) 누구나 추가 못하게 로그인한 아이디로만 가능하도록 (가능하면 운영진만 추가 가능하게)
2) 수정 삭제 가능하도록 하는 기능을 추가
3) 1시간에 한번씩 여기에 저장된 스트리머들을 업데이트 하도록 해보고싶습니다.
4) 중복 소환사명 안나오게하려고 합니다.
5) 가능하면 가독성 좋게 업데이트를 하려고합니다.
Github
'Django 개인프로젝트 > 첫번째 프로젝트' 카테고리의 다른 글
| 8. 회원가입 기능 개선 (1) | 2024.11.08 |
|---|---|
| 7. html 템플릿 Django프로젝트 (1) (3) | 2024.11.05 |
| 5. Django와 Riot api 를 이용한 솔로랭크 전적검색 만들어보기 (2) (4) | 2024.10.29 |
| 4. Django와 Riot api 를 이용한 솔로랭크 전적검색 만들어보기 (2) | 2024.10.29 |
| 3. 글쓰기 구현하기 (2) | 2024.09.19 |