Django Rest Framework (1)

빈코더·2021년 5월 12일
0
post-thumbnail

Django Rest Framework를 공부하자.

나는 Django의 매력에 빠져 더 깊이 파고들기 위해 DRF를 공부하려고 한다.

DRF에대해서 공부를 해보자.

DRF의 REST란?

REST는 WEB 관련 기술이다. 데이터를 주고받는 일종의 규약이다. 단순하다. 사용하기 편하다.

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

DRF의 장점

  • 범용성이 좋은 웹 브라우저 API를 사용한 쉬운 개발 (RESTful한 서버를 보다 쉽고 빠르게 만들수 있다.)
  • OAuth1, OAuth2를 위한 추가적인 패키지가 인증 정책에 추가되어 있는 경우
  • DB data를 Json으로 직렬화하는(serialize)기능
  • 국제적인 기업들을 포함해서 다수의 기업이 사용 하므로 커뮤니티가 잘 되어 있음

Serializer

DRF를 가장 매력적으로, 혹은 강력하게 만들어주는 요소이다.

serializer는 queryset과 모델 인스턴트와 같은 복잡한 데이터를 JSON, XML 또는 다른 콘텐츠 유형으로 쉽게 변환 할 수 있다.

또한 serializer는 받은 데이터의 유효성(validation)을 검사한 다음, 복잡한 타입으로 형변환을 할 수 있도록 serialization을 제공한다.

REST framework의 serializer는 Django의 형태와 ModelForm클래스와 유사하게 동작한다.

DRF 설치

일단 Django 기본셋팅이 다됐다는 가정하에 진행해보자.

일단 앱을 하나 만들고

(base) django-admin startapp drftest
(base) ls
drftest manage.py  testdrf

testdrf안에있는 settings.py에 app추가를 해주자.

(base) vim testdrf/settings.py 
 33 INSTALLED_APPS = [                       
 34     'django.contrib.admin',              
 35     'django.contrib.auth',               
 36     'django.contrib.contenttypes',       
 37     'django.contrib.sessions',           
 38     'django.contrib.messages',           
 39     'django.contrib.staticfiles',        
 40     'drftest',   <--- 추가                          
 41 ]        

DB등록도 해주고

 DATABASES = {            
     'default': {                      
         'ENGINE': 'django.db.backends.mysql',              
         'NAME': 'testdrf',      
         'USER': 'root',             
         'PASSWORD': 'password 입력',    
         'HOST': 'localhost',   
         'PORT': '3306' 
     }                           
 }      

migrate를 해주자.

(base) python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

그다음 admin계정을 하나만들고 서버를 실행시켜 확인해보자.

(base) python manage.py createsuperuser
Username (leave blank to use 'song'): admin
Email address: 
Password: 
Password (again): 
Superuser created successfully.
(base) python manage.py runserver 
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
May 12, 2021 - 09:42:08
Django version 3.2.2, using settings 'testdrf.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

[http://127.0.0.1:8000/admin]로 가서 방금만든 admin계정으로 로그인하면 확인이 가능하다.


여기서 쉘에서 객체생성하는것과 동일한 작업을 할 수 있다.

이제 모델을 하나 만들고 migrate를 해주자.

(base) vim drftest/models.py
from django.db import models 
    
    class Movie(models.Model):
        name = models.Charfield(max_length=50)
        description = models.CharField(max_length=200)
        active = models.BooleanField(default=True)
        
        def __str__(self):
            return self.name
            
            
            
(base) python manage.py makemigrations
Migrations for 'drftest':
  drftest/migrations/0001_initial.py
    - Create model Movie
(base) python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, drftest, sessions
Running migrations:
  Applying drftest.0001_initial... OK

위까지 했으면 admin.py에다가 아래와 같이 입력하자.

(base) vim drftest/admin.py
 from django.contrib import admin
 from drftest.models import Movie
                            
 admin.site.register(Movie)

그리고 사이트를 다시들어가보면 ~!!

1장은 여기서 끝

profile
미래의 리눅스 토발즈

0개의 댓글