[Django REST Framework]에서 React와의 API 연동
14720 단어 django-rest-frameworkMac장고React
실행 환경
MacOS BigSur - 11.2.1
Python3 - 3.8.2
장고 - 3.1.7
djangorestframework - 3.12.2
npm - 6.14.4
react - 17.0.1
react-dom - 17.0.1
axios - 0.21.1
Django REST Framework (DRF) 시작하기
지금까지 Django만을 이용한 Web 어플리케이션의 작성을 하고 있었습니다만, 프런트 엔드의 고도화를 할 수 없고, DRF를 이용해 React와 조합해 보고 싶다! ! ! 라고 생각했습니다. React에 관해서는 아직 지식이 적습니다만, 우선 DRF로 작성한 API를 React에 건네주는 부분을 구현을 했으므로 그 순서를 메모가 쓰루에 기술합니다.
DRF 계속(백엔드)
마지막 기사 ⇨
htps : // 이 m/카추노 9/있어 ms/52아 756f15207f625f358
에서 커스텀 유저에 의한 DRF 프로젝트 작성은 끝나므로 그 계속부터입니다.
덧붙여서, 디렉토리 구성은 이런 느낌입니다.
my_api
├── backend
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── media
└── my_api
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py
모델
우선 쉽게 Post 모델을 만들었습니다.
models.py
class Post(models.Model):
title = models.CharField('タイトル', max_length=50)
text = models.TextField('テキスト')
created_at = models.DateField('作成日', auto_now_add=True)
updated_at = models.DateField('更新日', auto_now=True)
def __str__(self):
return self.title
보기
views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from backend import serializers
from .models import Post
class PostAll(APIView):
def get(self, request):
try:
post = Post.objects.all().order_by('-created_at')
res_list = [
{
'id': p.id,
'date': p.created_at,
'title': p.title,
}
for p in post
]
return Response(res_list)
except:
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
URL 관련
이제 간단한 모델과 뷰를 만들었으므로 URL을 설정합니다.
my_api/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('backend.urls'))
]
backend/urls.py
from django.urls import path
from backend import views
urlpatterns = [
path('', views.PostAll.as_view()),
]
동작 확인
가상 환경 내에서 서버를 시작합니다.
$ python3 manage.py runserver
http://localhost:8000/api/v1/
에 액세스하면, 제대로 API의 동작 확인을 실시할 수 있었습니다.
덧붙여서 데이터는 admin 사이트에서 미리 샘플처럼 몇가지 추가하고 있습니다.
React 프로젝트 작성(프론트)
이전까지와는 다른 터미널을 시작하여 환경 구축, 프로젝트 작성을 실시합니다. 앱 이름이 'frontend'로 설정되었습니다.
$ npx create-react-app
$ cd frontend
$ npm install axios
$ npm install react-router-dom
$ npm start
그러면 Reacr 로고가 표시되는 페이지가 나와서 성공적으로 프로젝트를 만들 수 있다는 것을 알 수 있습니다.
덧붙여서, frontend/src의 디렉토리 구성은 이와 같습니다.
frontend/src
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── reportWebVitals.js
└── setupTests.js
React와 DRF의 협력
그런데, 드디어 DRF와의 제휴를 실시합니다. DRF에서
http://localhost:8000/api/v1/
에서 데이터를 얻을 수 있도록하고 있기 때문에 React 측에서 여기에 Get 요청을 보내도록 구현합니다. axios를 사용하여 간단하게 요청을 구현할 수 있다는 것으로 설치했습니다.
App.js
import React, { Component } from 'react';
import axios from 'axios';
class App extends Component {
state = {
posts: []
};
componentDidMount() {
this.getPosts();
}
getPosts() {
axios
.get('http://localhost:8000/api/v1/')
.then(res => {
this.setState({ posts: res.data });
})
.catch(err => {
console.log(err);
});
}
render() {
return (
<div>
{this.state.posts.map(item => (
<div key={item.id}>
<h1>{item.title}</h1>
<p>{item.date}</p>
</div>
))}
</div>
);
}
}
export default App;
http://localhost:3000/
에 액세스하면 확실히 DRF로부터 데이터를 받고 있는 것을 알 수 있습니다! !
이번은 DRF와 React의 제휴를 확인할 수 있었던 곳까지입니다.
지금까지 백엔드와 프런트 엔드를 나누어 개발한다고 하는 고도의 개발 경험이 없었기 때문에, DRF와 React가 제휴할 수 있었던 것만으로 매우 기뻤습니다(웃음)
React에 관해서는 아직 지식이 적고, 보자 보이지만 지금부터 개발을 진행해 나가고 싶습니다! !
참고
이하의 페이지가 매우 알기 쉽게, 참고로 했습니다.
- htps : // 이 m/__아니 t__/있어 ms/f5아 5아 64아 05541fc다
- htps : // 코 m / 피요 판만 / ms / 5 fb9c290d452 005782
- htps : // 코 m / 피요 판만 / ms / 0 아 757 아 7b2 d412 07135
Reference
이 문제에 관하여([Django REST Framework]에서 React와의 API 연동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kachuno9/items/d1b7fbab70f33290f510텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)