우기의 알 블로그 저자 한승욱이라고 합니다.
스스로 알을 깨고 나오는 새처럼
언젠가 알을 깨고 온전한 나 자신이 되었을 때, 그때를 기다리며 제 속에서 솟아 나오는 것을 글로써 표현하고자 합니다.
'개발 기술블로그'를 위주로 저 한승욱의 다양한 관심사, 생각, 철학 등을 포스팅합니다.
> python3 -m venv venv
# 처음은 venv 명령어 2번째는 본인의 가상환경 이름 자유롭게 가능
> source venv/bin/activate
# 가상환경 활성화
장고 패키지 설치
> pip install django djangorestframework
장고 프로젝트 및 앱 생성
> django-admin startproject "원하는 이름" .
# . 은 현재 위치에 프로젝트를 푼다는 의미. 1 depth 줄어든다. 본인은 myapi로함
> python manage.py startapp "원하는 이름"
# 장고는 내부 프로젝트 안에 앱 기반으로 돌아가기에 본인은 quiz라는 앱 생성.
> code .
# 해당 루트 디렉토리에서 vscode를 염
# quiz/models.py
from django.db import models
# Create your models here.
class Quiz(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
answer = models.IntegerField()
실제 퀴즈의 구성에 맞게 데이터베이스 모델을 설정해주는 것이다.
제목, 내용, 정답 으로 간단하게 구성하였다.
4) serializers
장고의 모델 형태로 데이터를 JSON 형식으로 직렬화 해주는 코드이다.
장고 모델 데이터를 템플릿에 뿌려주면 웹에 보여지듯이 JSON을 이용해 api 통신을 하는
것이다.
# quiz 폴더 내에 serializers.py 생성
# quiz/serializers.py
from rest_framework import serializers
from .models import Quiz
class QuizSerializer(serializers.ModelSerializer):
class Meta:
model = Quiz
fields = '__all__'
rest_framework 패키지의 serializer를 import 해주고 3에서 만들어주었던
Quiz 모델을 import한다.
fileds = ('title', 'body',
'answer')의 전체 필드를 다 담아오게 작성하는 것인데 본인의 경우 에러가 떠서 위와 같이 코딩해주었다.
Quiz 모델에 있는 데이터를 title, body, answer를 포함한 JSON 형식으로
변환해주는 것이다.
5) views
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Quiz
from .serializers import QuizSerializer
import random
# Create your views here.
@api_view(['GET'])
def helloAPI(request):
return Response("hello world!")
@api_view(['GET'])
def randomQuiz(request, id):
totalQuizs = Quiz.objects.all()
randomQuizs = random.sample(list(totalQuizs), id)
serializer = QuizSerializer(randomQuizs, many=True) #many 부분을 통해 다량의 데이터도 직렬화 진행
return Response(serializer.data)
helloAPI는 실제 API 테스트를 하기 위한 샘플 코드이다.
randomQuiz는 주어진 갯수만큼 랜덤한 퀴즈를 반환하는 API이다.
생성해준 Quiz 데이터베이스의 모든 object를 가져와서 random 패키지를 통해 해당
object에서 갯수만큼 샘플링을 한다.
many=True 부분은 다량의 데이터를 직렬화하기 위해서이다.
6) urls
api에 요청을 할 수 있는 주소를 생성하는 것이다. 위에서 작성해준 함수를 사용해줄 것이기에 .
veiws 파일에서 randomQuiz를 import 해준다.
# quiz/urls.py 생성
from django.urls import path, include
from .views import helloAPI, randomQuiz
urlpatterns = [
path("hello/", helloAPI),
path("<int:id>/", randomQuiz),
]
# myapi/urls.py
"""myapi URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path, include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('quiz/', include('quiz.urls')),
]
quiz 폴더에 생성한 url과 기본 myapi의 url은 다른 파일이다.
quiz 폴더에 있는 것은 quiz 앱에 대한 url을 관리해주는 것이고, myapi에 있는 것은
전체 프로젝트에 대한 url을 관리하는 것이다.
위와 같이 quiz 폴더의 url을 먼저 설정하고 myapi의 url에 연동하는 방식으로
진행했다.
기존 디폴트로 되어 있는 url(r'^admin',
admin.site.urls) 방식의 정규표현식 형태는 레거시한 방식이기에 우리는 path 형식으로 진행한다.
7) admin 추가
# quiz/admin.py
from django.contrib import admin
from .models import Quiz
admin.site.register(Quiz)
장고는 기본적으로 웹관리자를 위한 admin 패널을 제공해주는데 여기서 쉽게 데이터를 추가하고
삭제할 수 있게 admin에 해당 quiz 모델을 추가해준다.
4. Django 백엔드 구축
개요 - wooogy-egg.tistory.com/4
개발 환경 세팅 - wooogy-egg.tistory.com/5?category=938272
Flutter 앱 화면 및 로직 구성 - wooogy-egg.tistory.com/6
본 글을 인프런 강의를 따라서 제작해본 경험을 남기고자 작성합니다.
1) Create Project
해당 장고 프로젝트가 들어갈 빈 프로젝트 생성
가상환경 설정
장고 패키지 설치
장고 프로젝트 및 앱 생성
2) settings.py
ALLOWED_HOST 수정
TIME_ZONE 수정
정적파일 관리 코드 작성
앱 추가
3) models
실제 퀴즈의 구성에 맞게 데이터베이스 모델을 설정해주는 것이다.
제목, 내용, 정답 으로 간단하게 구성하였다.
4) serializers
장고의 모델 형태로 데이터를 JSON 형식으로 직렬화 해주는 코드이다.
장고 모델 데이터를 템플릿에 뿌려주면 웹에 보여지듯이 JSON을 이용해 api 통신을 하는 것이다.
rest_framework 패키지의 serializer를 import 해주고 3에서 만들어주었던 Quiz 모델을 import한다.
fileds = ('title', 'body', 'answer')의 전체 필드를 다 담아오게 작성하는 것인데 본인의 경우 에러가 떠서 위와 같이 코딩해주었다.
Quiz 모델에 있는 데이터를 title, body, answer를 포함한 JSON 형식으로 변환해주는 것이다.
5) views
helloAPI는 실제 API 테스트를 하기 위한 샘플 코드이다.
randomQuiz는 주어진 갯수만큼 랜덤한 퀴즈를 반환하는 API이다.
생성해준 Quiz 데이터베이스의 모든 object를 가져와서 random 패키지를 통해 해당 object에서 갯수만큼 샘플링을 한다.
many=True 부분은 다량의 데이터를 직렬화하기 위해서이다.
6) urls
api에 요청을 할 수 있는 주소를 생성하는 것이다. 위에서 작성해준 함수를 사용해줄 것이기에 . veiws 파일에서 randomQuiz를 import 해준다.
quiz 폴더에 생성한 url과 기본 myapi의 url은 다른 파일이다.
quiz 폴더에 있는 것은 quiz 앱에 대한 url을 관리해주는 것이고, myapi에 있는 것은 전체 프로젝트에 대한 url을 관리하는 것이다.
위와 같이 quiz 폴더의 url을 먼저 설정하고 myapi의 url에 연동하는 방식으로 진행했다.
기존 디폴트로 되어 있는 url(r'^admin', admin.site.urls) 방식의 정규표현식 형태는 레거시한 방식이기에 우리는 path 형식으로 진행한다.
7) admin 추가
장고는 기본적으로 웹관리자를 위한 admin 패널을 제공해주는데 여기서 쉽게 데이터를 추가하고 삭제할 수 있게 admin에 해당 quiz 모델을 추가해준다.
8) makemigrations & migrate
업데이트 된 모델 즉 데이터베이스에 대해 설정해주는 코드이다.
9) 결과
helloApi:
randomQuiz:
'기술개발 > Django' 카테고리의 다른 글