Django REST Framework 소개: 예제를 사용한 개발

게시 됨: 2020-10-05

Django REST Framework는 사용자가 RESTful API 개발을 시작하는 데 필요할 수 있는 표준 Python 패키지로 널리 배포됩니다. 정교하고 강력하며 놀랍도록 사용하기 쉬우며 매력적이고 탐색 가능한 API 버전을 제공합니다. Django REST Framework는 JSON 객체를 반환하는 옵션을 제공합니다. 이 프레임워크는 모델의 강력한 직렬화를 제공하고 완전한 REST 뷰어에서 기본 기능 기반 보기를 사용하여 데이터를 모두 표시합니다. 아래 에서 Django REST 프레임워크 에 대해 자세히 알아보세요 .

목차

Django REST 프레임워크란 무엇입니까?

Django REST Framework는 개발자가 웹 API를 쉽게 구축할 수 있도록 하는 유연하고 강력한 도구 키트입니다. 또한 API에 대한 클래스 기반 일반화 보기 및 직렬 변환기를 제공합니다. 소스 코드이기 때문에 웹 응용 프로그래밍 인터페이스를 개발하기 위한 Python 라이브러리를 나타내는 DRF로 축약됩니다. 이 기사에서와 같이 단계별 지침이 포함된 개발 API에 대해 이야기하고 있습니다.

그러나 가이드를 시작하기 전에 프레임워크가 왜 중요한지 이해하는 것이 중요합니다. 사용 가능한 많은 프레임워크를 통해 개발자는 블록 애플리케이션용 API를 쉽게 빌드할 수 있지만 Django REST 프레임워크가 선호됩니다. 이 프레임워크는 여러 가지 방법으로 사용하기 편리하며 다음과 같은 이점을 제공합니다.

  • 웹 브라우저에 가능한 응용 프로그래밍 인터페이스를 제공하므로 개발자에게 큰 도움이 됩니다.
  • OAuth1, OAuth2 등의 패키지를 포함한 인증 정책이 있습니다.
  • 직렬화 프로세서는 ORM 및 비ORM 데이터 소스를 지원합니다.
  • 이 프레임워크에는 광범위한 문서가 있으며 훌륭한 커뮤니티 지원을 제공합니다.
  • Mozilla, Heroku, RedHat 등을 포함한 훌륭한 플랫폼에서 사용하고 신뢰합니다.

읽기: Django 애플리케이션: 알아야 할 모든 것

Django REST 프레임워크 개발 설정

우선 운영 체제에 대한 Python 종속성을 설치해야 합니다. Windows 플랫폼을 사용하는 경우 가상 상자 또는 수동 명령으로 Linux 플랫폼을 보조 운영 체제로 쉽게 설치할 수 있습니다. 프레임워크를 진행하기 위해 효과적이고 편리한 Python 관리 도구를 사용할 수 있습니다.

대부분의 도구는 도우미입니다. 이를 통해 개발자는 Python 버전을 빠르게 변경하고, 프로젝트별 버전을 설정하고, 가상 환경을 관리하고, 시스템에 여러 버전을 설치할 수 있습니다. Linux 또는 Mac 운영 체제를 사용하는 경우 쉽게 설치할 수 있습니다.

Django REST 프레임워크의 도움 으로 RESTful이 아닌 애플리케이션을 RESTful 애플리케이션으로 변환할 수 있습니다. 여기에는 아래 언급된 절차가 포함됩니다.

DRF 설정

DRF 설정을 위해서는 다음을 설치해야 합니다.

껍데기

$ pip djangorestframework 설치

$ 핍 동결 > 요구 사항.txt

업데이트 설정:py:

파이썬

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'말하다',

'rest_framework'

)

RESTful 구조

RESTful API 개발에서 엔드포인트는 GET, PUT, POST, DELETE와 같은 메소드의 도움으로 애플리케이션의 구조 및 사용자 액세스를 나타냅니다. 이러한 끝점은 요소와 컬렉션을 중심으로 논리적으로 구성되며 둘 다 리소스로 계산됩니다. 단일 리소스가 있는 경우 해당 링크가 요소 및 컬렉션의 URL로 사용됩니다.

가져 오기

게시하다

놓다

삭제

/게시물/

모든 게시물 표시

새 게시물 추가

모든 게시물 업데이트

모든 게시물 삭제

/게시물/<ID>

<id> 표시

해당 없음

<id> 업데이트

아이디 삭제

직렬 변환기 및 뷰

Django REST 프레임워크 의 주요 빌딩 블록 은 직렬 변환기이며 Django 모델을 기반으로 하는 다양한 데이터 레코드의 표현을 정교화하는 데 사용됩니다. 직렬 변환기는 프레임워크에서 모델의 동작을 상속할 수 있는 표준 Python 클래스입니다.

serializers 클래스 내부에는 동일한 프레임워크의 패키지에서 데이터 유형을 활용하는 별도의 필드 세트가 있습니다. 그들은 또한 프레임워크와 클래스 사이의 유사점을 발견했습니다. 직렬 변환기 클래스는 자체적으로 생각하지 않으며 대부분의 REST 서비스 논리를 관리하는 보기와 통합됩니다. 또한 직렬 변환기 클래스를 사용하여 데이터를 변환합니다. 예를 들어, 일반 Django 보기 방법은 다음과 같습니다.

coffeehouse.stores.models 수입 스토어에서

Coffeehouse.stores.serializers에서 StoreSerializer 가져오기

rest_framework.decorators에서 api_view 가져오기

rest_framework.response 가져오기 응답에서

@api_view(['GET','POST','DELETE'])

def rest_store(요청):

request.method == 'GET'인 경우:

상점 = Store.objects.all()

serializer = StoreSerializer(stores, many=True)

반환 응답(serializer.data)

elif request.method == 'POST':

… #HTTP POST 작업을 위한 논리

elif request.method == '삭제':

… #HTTP DELETE 작업에 대한 논리

클래스 기반 보기

클래스 기반 보기의 도움으로 Django REST 프레임워크 는 사용자의 최고 및 복잡한 기능에 대한 액세스를 제공합니다. 클래스 기반 보기는 완전한 Python 클래스의 기능을 제공하고 Django 보기가 짧은 구현 시간과 함께 재사용성을 높이는 객체 지향 프로그래밍 원칙의 도움으로 쉽게 작동할 수 있도록 합니다.

Django 클래스 기반 보기는 Django 보기를 빌드하는 강력한 접근 방식을 강조하며 API를 빌드하는 데 사용되는 메서드의 대안이기도 합니다. 클래스 기반 보기를 개발하려면 다른 클래스 중 하나에서 상속할 수 있는 클래스를 만드는 것이 중요합니다. 예를 들어:

# 조회수.py

Django.views.generic에서 TemplateView 가져오기

클래스 AboutIndex(TemplateView):

template_name = '인덱스.html'

def get_context_data(자신, **kwargs):

# **kwargs는 키워드 컨텍스트 초기화 값을 포함합니다(있는 경우).

# 컨텍스트를 얻기 위해 기본 구현을 호출합니다.

컨텍스트 = super(AboutIndex, self).get_context_data(**kwargs)

# 템플릿에 전달할 컨텍스트 데이터 추가

context['aboutdata'] = '맞춤 데이터'

컨텍스트 반환

# urls.py

coffeehouse.about.views에서 가져오기 AboutIndex

django.urls 가져오기 경로에서

URL 패턴 = [

경로('about/index/',AboutIndex.as_view(),{'onsale':True}),

체크아웃: 초보자를 위한 12가지 Django 인터뷰 질문 및 답변

보기 업데이트

RESTful 애플리케이션 구조에 맞추려면 현재 보기를 리팩토링하는 것이 중요합니다. 이러한 보기를 주석 처리하고 다음과 같이 추가할 수 있습니다.

파이썬

django.shortcuts 가져오기 렌더에서

django.http에서 HttpResponse 가져오기

rest_framework.decorators에서 api_view 가져오기

rest_framework.response 가져오기 응답에서

talk.models 가져오기 포스트에서

talk.serializer에서 PostSerializer 가져오기

talk.forms에서 PostForm 가져오기

def 홈(요청):

tmpl_vars = {'형식': PostForm()}

반환 렌더링(요청, 'talk/index.html', tmpl_vars)

@api_view(['GET'])

def post_collection(요청):

request.method == 'GET'인 경우:

게시물 = Post.objects.all()

serializer = PostSerializer(posts, many=True)

반환 응답(serializer.data)

@api_view(['GET'])

def post_element(요청, pk):

노력하다:

포스트 = Post.objects.get(pk=pk)

Post.DoesNotExist 제외:

반환 HttpResponse(상태=404)

request.method == 'GET'인 경우:

직렬 변환기 = PostSerializer(포스트)

반환 응답(serializer.data)

설명

  • 위에 제공된 지침에서 @api_view 데코레이터는 보기 기능으로 전달되는 해당 HTTP 요청을 분석합니다.
  • 이제 뷰는 요소용인 경우 단일 게시물을 사용하거나 컬렉션용인 경우 전체 데이터를 가져옵니다.
  • 마지막으로 데이터가 이제 JSON으로 직렬화되고 그에 따라 반환됩니다.

웹 브라우징 API 또는 업데이트된 URL

업데이트된 Python용 URL은 다음과 같습니다.

# 토크 URL

django.conf.urls에서 가져오기 패턴, URL

urlpatterns = 패턴(

'talk.views',

url(r'^$', '홈'),

# API

url(r'^api/v1/posts/$', 'post_collection'),

url(r'^api/v1/posts/(?P<pk>[0-9]+)$', 'post_element')

)

RESTful API 통합을 위한 리팩터링

여기에는 다음과 같은 주요 HTTP 메서드가 포함됩니다.

가져 오기

초기 페이지 로드, 게시물을 표시하는 것이 중요하며 이를 위해 다음 요청을 추가할 수 있습니다.

load_posts()

// 페이지 로드 시 모든 게시물 로드

함수 load_posts() {

$.ajax({

url : "api/v1/posts/", // 엔드포인트

type : "GET", // http 메소드

// 성공적인 응답 처리

성공 : 함수(json) {

for (var i = 0; i < json.length; i++) {

console.log(json[i])

$(“#talk”).prepend(“<li id='post-“+json[i].id+”'><strong>”+json[i].text+”</strong> – <em> “ +json[i].author+”</em> – <span> “+json[i].created+

“</span> – <a id='delete-post-“+json[i].id+”'>삭제</a></li>”);

}

},

// 성공하지 못한 응답 처리

오류: 함수(xhr,errmsg,err) {

$('#results').html(“<div class='alert-box alert radius' data-alert>죄송합니다! 오류가 발생했습니다: “+errmsg+

” <a href='#' class='close'>&times;</a></div>”); // 오류를 DOM에 추가

console.log(xhr.status + ": " + xhr.responseText); // 콘솔에 오류에 대한 추가 정보를 제공합니다.

}

});

};

게시하다

POST 요청은 유사한 방식으로 관리되며 보기를 업데이트하여 이를 테스트할 수 있습니다. views.py에서 post_collection() 함수를 업데이트할 수 있습니다.

@api_view(['GET', 'POST'])

def post_collection(요청):

request.method == 'GET'인 경우:

게시물 = Post.objects.all()

serializer = PostSerializer(posts, many=True)

반환 응답(serializer.data)

elif request.method == 'POST':

데이터 = {'텍스트': request.DATA.get('the_post'), '저자': request.user.pk}

직렬 변환기 = PostSerializer(데이터=데이터)

serializer.is_valid()인 경우:

serializer.save()

반환 응답(serializer.data, status=status.HTTP_201_CREATED)

반환 응답(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

또한 읽기: 인도의 Django 개발자 급여

결론

실제 Django REST 프레임워크 의 REST 부분은 매우 간단하며 요청을 처리하기 위해 post 요소 기능을 업데이트하기만 하면 됩니다. 여전히 쿼리가 있는 경우 즉석에서 사용할 수 있는 Django REST 프레임워크 및 리소스가 많이 있습니다.

Django 및 기타 전체 스택 개발자 언어 및 도구에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 500시간 이상의 엄격한 교육을 제공하는 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 PG 디플로마를 확인하세요. 9개 이상의 프로젝트 및 과제, IIIT-B 동문 자격, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.

미래의 직업을 위한 준비

전체 스택 소프트웨어 개발에서 업그레이드 및 IIIT-BANGALORE의 PG 디플로마
오늘 등록