Computer Science/BackEnd

Django API #1 | Setup, Models and Admin

토마토. 2022. 9. 6. 16:07

Building APIs with Django and Django Rest Framework (readthedocs.org)

 

Building APIs with Django and Django Rest Framework
#2 Setup, Models and Admin

시작하기에 앞서 파이썬 가상환경을 활성화시켜주자. 

$ python3 -m venv pollsapi
$ cd pollsapi/bin
$ source activate

 

Creating a project

앞선 튜토리얼에서 진행했던 것처럼 pollsapi 프로젝트를 시작해준다. 

$ django-admin startproject pollsapi

 

Database setup

그냥 SQlite database를 사용할 것이다. 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

디폴트로 설정되어있는 것이 딱 맞다. 

설정에 정해둔 것에 맞게 migrate 해준다. 

 

Creating models
 python manage.py startapp polls

모델을 만들 앱을 시작해준다. 

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Poll(models.Model):
    question = models.CharField(max_length=100)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)
    pub_date = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.question
    
class Choice(models.Model):
    poll = models.ForeignKey(Poll, related_name='choices', on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=100)
    def __str__(self):
        return self.choice_text

class Vote(models.Model):
    choice = models.ForeignKey(Choice, related_name='votes', on_delete=models.CASCADE)
    poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
    voted_by = models.ForeignKey(User, on_delete=models.CASCADE)
    class Meta:
        unique_together = ("poll", "voted_by")

API를 개발하기 위한 방식으로 모델을 정의하였음. 

 

 

Activating models
# Application definition

INSTALLED_APPS = [
    'polls',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Installed_apps 리스트에 'polls'를 추가해준다. 

 

그리고 이 변경사항을 저장해주기 위해 makemigrations, migrate를 연달아 수행한다. 

 

이제 polls app 내부에 urls.py 파일을 만들어 빈 urlpattenrs 리스트를 만들어주고, 

 

pollsapi/urls.py 파일에 polls url을 추가해준다. 

"""pollsapi URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/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.contrib import admin
from django.urls import path, include, re_path

urlpatterns = [
    re_path(r'^', include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

  • setting up the admin

admin 파일에 poll, choice 모델을 추가해준다. 

from django.contrib import admin
from .models import Poll, Choice

# Register your models here.
admin.site.register(Poll)
admin.site.register(Choice)