[Django][RESTframework] 추가, 업데이트 및 검색을 위한 간단한 동적 API 만들기 비망록
15302 단어 restframeworkPython3파이썬장고api
사전 쓰기
굉장히 돌아다니면서 어떻게든 작성할 수 있던 API에 대해서 비망록을 남긴다.
이번에 만든 API는 다음과 같습니다.
# ユーザーの登録
http://127.0.0.1:8000/v1/user/
# pk=1 のユーザー情報を更新
http://127.0.0.1:8000/v1/user/1/
# pk=2 のユーザー情報を取得
http://127.0.0.1:8000/v1/user/2/affinity
준비
프로젝트 이름: project
앱 이름 : api
구성
└─project
├─api
│ ├─migrations
│ │ └─..
│ ├─__init__.py
│ ├─apps.py
│ ├─models.py
│ ├─serializer.py
│ ├─urls.py
│ └─views.py
├─project
│ ├─__init__.py
│ ├─asgi.py
│ ├─settings.py
│ ├─urls.py
│ └─wsgi.py
├─db.sqlite3
└─manage.py
프로젝트 만들기
$ django-admin startproject project
$ cd project
$ python manage.py startapp api
$ brew install mysql
$ pip install pymysql
$ pip install djangorestframework
$ pip install django-filter
$ mysql.server start
# mysql.server stop でサーバー停止
#MySQLに入る
$ mysql -u root
MySQL 작업
mysql> show databases;
mysql> create database sample;
mysql> show databases;
mysql> exit
마나게. py
manage.py
import pymysql #追加
pymysql.install_as_MySQLdb() #追加
$ python manage.py migrate
$ mysql -u root
mysql> use sample;
mysql> show tables;
mysql> exit
눈가리 gs. py
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api', #追加
'rest_framework', #追加
'django_filters', #追加
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sample', # 作成したデータベース名
'USER': 'root', # ログインユーザー名
'HOST': '',
'PORT': '',
}
}
# ペジネーション
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 5
}
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
조류에서 ls. py
먼저 모델 만들기
데이터베이스에 저장할 내용 설명
models.py
from django.db import models
"""
CharField (文字列が入る)文字数制限必要
TextField(文章が入る)
ImageField(写真ファイルが入る)
FileField(不特定のファイルが入る)
IntegerField(数値が入る)オーバーフロー注意
BooleanField(True/False)が入る *いわゆるフラッグ
DateField(日付が入る)
DateTimeField(日時が入る)
ForeignKey(外部キー) *一対多のリレーションになる。(言葉だけでも覚えておきましょう!)
ManyToManyField(複数の外部キーが入る) *多対多のリレーションになる
OneToOneField(外部キー) *一対一のリレーションになる
"""
class BaseAPI(models.Model):
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
class Meta:
verbose_name_plural = "ベースAPI"
세리아 ぃぜ r. py
모델에 데이터를 적절한 형태로 입력, 출력하는 것
-[참고 사이트 6]
serializer.py
# coding: utf-8
from .models import BaseAPI
from rest_framework import serializers
class BaseAPISerializer(serializers.ModelSerializer):
class Meta:
model = BaseAPI
fields = (
'first_name',
'last_name'
)
비에ws. py
View 설정은 여기 참조
수업
조작
CreateAPIView
등록(POST)
ListAPIView
일람 취득(GET)
RetrieveAPIView
획득(GET)
UpdateAPIView
업데이트(PUT, PATCH)
DestroyAPIView
삭제(DELETE)
-[참고 사이트 3]
views.py
# coding: utf-8
from .models import BaseAPI
from .serializer import BaseAPISerializer
from rest_framework import generics
class BaseAPIViewSet_POST(generics.CreateAPIView):
queryset = BaseAPI.objects.all()
serializer_class = BaseAPISerializer
class BaseAPIViewSet_PUT(generics.UpdateAPIView):
queryset = BaseAPI.objects.all()
serializer_class = BaseAPISerializer
class BaseAPIViewSet_GET(generics.RetrieveAPIView):
queryset = BaseAPI.objects.all()
serializer_class = BaseAPISerializer
project/urls.py
v1은 관습에서 API의 버전을 나타내는 것 같은 Ver 1.0.1과 같은
urls.py
"""プロジェクト名 URL Configuration
'urlpatterns'リストはURLをビューにルーティングします。
詳細は以下を参照してください。
https://docs.djangoproject.com/en/3.1/topics/http/urls/
例を紹介します。
関数ビュー
1. インポートの追加: from アプリ名 import views
2. urlpatternsにURLを追加する: path('', views.home, name='home')
クラスベースのビュー
1. インポートの追加: from 他のアプリ名.views import Home
2. urlpatternsにURLを追加する: path('', Home.as_view(), name='home')
別の URLconf を含む
1. include() 関数をインポートします: from django.urls import include, path
2. urlpatternsにURLを追加する: path('blog/', include('blog.urls')
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('v1/', include('api.urls')),
]
api/urls.py
동적 라우팅을 원한다면
< str : pk >로 작성하십시오.
app/urls.py
# coding: utf-8
from django.urls import path
from .views import BaseAPIViewSet_POST, BaseAPIViewSet_PUT, BaseAPIViewSet_GET
app_name = 'api'
urlpatterns = [
path('user/', BaseAPIViewSet_POST.as_view(), name='POST'),
path('user/<str:pk>/', BaseAPIViewSet_PUT.as_view(), name='PUT'),
path('user/<str:pk>/affinity', BaseAPIViewSet_GET.as_view(), name='GET'),
]
$ python manage.py runserver
# ユーザーの登録
http://127.0.0.1:8000/v1/user/
# pk=1 のユーザー情報を更新
# (存在しないpkを指定するとサイトにアクセスできないと表示される)
http://127.0.0.1:8000/v1/user/1/
# pk=2 のユーザー情報を取得
# (存在しないpkを指定するとサイトにアクセスできないと表示される)
http://127.0.0.1:8000/v1/user/2/affinity
이것으로 완성
URL의 pk를 얻고 싶다면
이 기사
작성 방법 참조
참고 사이트
1, Django REST Framework 사용법 노트
2, Django REST Framework를 사용하여 폭속으로 API 구현
3, DRF의 General view 사용법
4, Django REST framework 사용자 정의 방법 - 자습서 보충
5, Django 개발자를 위한 길① ~ Models 이해 ~
6, Django REST framework에서 배운 것을 정리해 보았습니다.
Reference
이 문제에 관하여([Django][RESTframework] 추가, 업데이트 및 검색을 위한 간단한 동적 API 만들기 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akidon0000/items/b05fc8011794e175e640텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)