학교 수업간 유니티를 이용하여 간단한 게임을 만들어보던 중 랭킹서버용으로 랭킹API 장고로 아주 간단하게 제작하기로 생각하여 제작하였습니다.
해당 글에서는 장고를 통한 reat-api, JWT, 도커를 통한 배포 등을 다루었습니다
저는 API통신을 위한 부분을 만들기 위해 rest api를 제작할수 있는 rest framework를 이용하여 제작하였습니다.
https://www.django-rest-framework.org/
Home - Django REST framework
www.django-rest-framework.org
장고 앱의 모델 구성
#프레임워크
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from django.http import Http404
#데어터 처리
from .models import GameRank
from .serializers import GameRankSerializer
# Create your views here.
#GET,POST 부분
class GameRankAPI(APIView):
#list
def get(self, request):
gameRankList = GameRank.objects.all() #질의할 쿼리생성
print(gameRankList)
serializer = GameRankSerializer(gameRankList, many=True)
return Response(serializer.data)
#새로운 랭킹 작성
def post(self, request):
serializer = GameRankSerializer(data = request.data)
if serializer.is_valid(): #유효성 검사
serializer.save() #저장
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#하나씩 조회
class GameRankDetail(APIView):
#해당 객체 가져오기
def get_object(self, pk):
try:
return GameRank.objects.get(pk=pk)
except GameRank.DoesNotExist:
raise Http404
#가저온 객체를 이용 출력
def get(self, request, pk, format=None):
gameRankObject = self.get_object(pk)
serializer = GameRankSerializer(gameRankObject)
return Response(serializer.data)
#수정
def put(self, request, pk, format=None):
gameRankObject = self.get_object(pk)
serializer = GameRankSerializer(gameRankObject, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#삭제
def delete(self, request, pk, format= None):
gameRankObject = self.get_object(pk)
gameRankObject.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
장고에는 Viewset이 있어 이를 활용하여 구현하였다.
유니티에서 로그인을 하기위해 rest api를 통한 로그인을 구현해야한다.
따라서 토큰방식을 사용하기로 결정 하고 진행하였다.
https://ssungkang.tistory.com/entry/Django-Token-%EC%9D%B8%EC%A6%9D-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-TokenAuthentication
[Django] Token 인증 적용하기, TokenAuthentication
DRF 에서 지원하는 인증은 다음과 같습니다. rest_framework.authentication.SessionAuthentication rest_framework.authentication.BasicAuthentication rest_framework.authentication.TokenAuthentication 초기..
ssungkang.tistory.com
외부 DB 연결
pip install mysqlclient
연결 어댑터 설치
DB연결에 연결후 DB생성을 manager.py를 통해 진행
도커를 통한 서비스 배포
도커 데스트탑 설치, 프로젝트에 Dockerfile 제작
docker build -t name .
빌드 후
도커 허브 업로드 하여 공개 할수없으므로 별도 tar로 제작
docker save dfdf
https://www.leafcats.com/240
docker image를 tar 파일로 저장 (export / import / save / load)
docker build나 commit으로 만들어진 이미지는 일반적으로 docker hub와 같은 registry에 push되고, 이를 다시 pull 받는 방식으로 사용된다. 하지만, 간혹 docker 이미지를 registry를 거치지 않고 이동해야 할..
www.leafcats.com
API통신간 크롬등 브라우저에서의 보안상의 이유로 외부 도메인에 대한 호출을 차단한다.
해당 차단을 풀기위해선 같은 도메인으로 서비스를 제공하거나 서버측에서 접속하는 도메인을 화이트리스트로 허용해주면 사용이 가능하다 아래는 참고링크이다.
https://jahong.tistory.com/entry/CORSCross-Origin-Resource-Sharing%EC%99%80-Django
CORS(Cross-Origin Resource Sharing)와 Django
CORS란 무엇인가? CORS(Cross-Origin Resource Sharing)란 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다(위키백과). 모노리틱
jahong.tistory.com