webAPI를 만듭니다. EC2에서 DjangoRestFramework 1에서 환경 구축
소개
이 기사에서는 장고에서 webAPI를 만들자! 라는 기사입니다.
RDS MySQL을 사용하고 있습니다.
마지막 기사
[AWS]EC2,RDS,Django를 사용해 보았다. 1부터 환경 구축
$ <- 自分のPCターミナルでのコマンド
[ec2-user] $ <- EC2にログイン中でのコマンド
MySQL > <- MySQLにログイン中でのコマンド
# <- 私のコメント
>>> <- 実行結果(出力値)
전제 조건
장고 프로젝트 만들기
#testDjangoというプロジェクトを作成する
[ec2-user] $ django-admin startproject testDjango
[ec2-user] $ cd
[ec2-user] $ cd testDjango
마지막 기사[2.2],[2.5]참조
FileZilla를 사용하여 settings.py 수정
testDjango/settings.py
#IPアドレスをグーグルなどで検索した時エラー内容を返してくれる
DEBUG = True
#変更
ALLOWED_HOSTS = ['(EC2のオープンIPアドレス)','localhost']
...
(略)
...
#デフォルトの設定をリマーク
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
#新しく記入
#[NAME]はRDS内のテーブル名、後に作成します。
#[USER,PASSWORD,HOST]はそれぞれ入力
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbtest',
'USER': '(DBマスターユーザー)',
'PASSWORD': '(DBマスターユーザーパスワード)',
'HOST': '(DBエンドポイント)',
'PORT': '3306',
}
}
...
(略)
...
#日本語に変更
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
#日本時間に変更
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
STATIC_URL = '/static/'
#pollsと言う名前のアプリを作成する
[ec2-user] $ python manage.py startapp polls
[ec2-user] $ pip install djangorestframework
순서 중요
testDjango/settings.py
...
(略)
...
#変更
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'polls.apps.PollsConfig',
]
#(アプリ名).apps.(先頭大文字アプリ名)Config
...
(略)
...
RDS MySQL에 로그인
[ec2-user] $ mysql -h (DBエンドポイント) -u (DBマスターユーザー名) -p
# パスワードを要求されるので入力(文字は表示されないが打ち込めています)(コピペ可)
>>> Welcome to the MariaDB monitor.
# が表示されればRDSのMySQLに接続ができた
#データベース内一覧を表示(小文字でも可 show database;)
MySQL > SHOW databases;
#「dbtest」という名前のテーブルを作成
MySQL > CREATE DATABASE dbtest;
#終了
MySQL > exit
장고 설정
모델 만들기
polls/models.py
from django.db import models
class User(models.Model):
#作成時刻を記録
created = models.DateTimeField(auto_now_add=True)
#Userの名前を記録
name = models.CharField(max_length=100, blank=True, default='')
#Userのemail
mail = models.TextField()
class Meta:
ordering = ('created',)
데이터베이스 마이그레이션 수행
[ec2-user] $ python manage.py makemigrations polls
[ec2-user] $ python manage.py migrate
확인해 보겠습니다.
MySQL > show databases;
MySQL > use dbtest;
MySQL > show tables;
>>>
+----------------------------+
| Tables_in_dbtest |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| example_table |
| polls_user | <--生成されている
+----------------------------+ (アプリ名)_user
MySQL > exit
다음 기사가 도움이됩니다.
【학습 메모】Makemigrations와 Migrate에 대해
serializers.py 만들기
기본적으로 생성되지 않으므로 메모장이나 뭔가로 만들고 FileZilla로 전송하십시오.
polls/serializers.py
from rest_framework import serializers
from polls.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'name', 'mail')
views.py 구현
polls/views.py
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from polls.models import User
from polls.serializers import UserSerializer
@csrf_exempt
def user_list(request):
if request.method == 'GET':
#UserをMySQLから全件取得
polls = User.objects.all()
serializer = UserSerializer(polls, many=True)
#Jsonで返してくる
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = UserSerializer(data=data)
if serializer.is_valid():
serializer.save()
#登録成功するとJsonデータが帰ってくる ##status 200番台は処理が成功した
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
polls/urls.py 만들기
이것도 새로 만들어주세요.
polls/urls.py
from django.urls import path
from polls import views
urlpatterns = [
path('user/', views.user_list),
]
큰 urls.py에 연결
testDjango/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('polls.urls')),
]
이것으로 설정이 종료됩니다.
테스트하다
로컬 서버를 설정
로컬이란 무엇입니까? 라고 하는 분은 이하의 기사가 알기 쉬웠습니다
장고는 누가 움직이고 있습니까? (배포를 위한 부감)
[ec2-user] $ cd
[ec2-user] $ cd testDjango
[ec2-user] $ python manage.py runserver
이 후 Google 크롬 등에서
http://(EC2のオープンIPアドレス)/user/
그리고 검색하면
[]
그리고 빈 괄호가 돌아왔다고 생각합니다.
데이터 넣기
이대로라면 불편하기 때문에
Google 크롬 확장 프로그램 ARC를 다운로드하세요.
Advanced REST client 다운로드
GET에서 통신하면 빈 괄호가 반환됩니다.
POST로 통신해 봅니다. 그 때
{"name":"tanaka","mail":"[email protected]"}
이 정보를 추가합니다.
SEND를 누르면 응답이 반환됩니다.
또 GET로 제대로 등록할 수 있었는지 확인해 보면 좋을 것입니다.
또한 데이터베이스는
MySQL > use dbtest;
MySQL > SELECT * FROM polls_user;
>>>
+----+----------------------------+--------+-------------+
| id | created | name | mail |
+----+----------------------------+--------+-------------+
| 1 | 2020-10-21 05:10:23.730602 | tanaka | [email protected] |
+----+----------------------------+--------+-------------+
이제 등록에 성공했습니다.
결론
이 기사에서 누군가의 도움을 주시면 감사하겠습니다.
참고 사이트
이하와 본 기사의 도중에 매우 참고로 한 사이트를 소개하고 있습니다.
고마워요.
[1]. 장고 REST 프레임 워크 튜토리얼 1
[2]. 장고는 누가 움직이고 있습니까? (배포를 위한 부감)
[3]. 【학습 메모】Makemigrations와 Migrate에 대해
[4]. 자주 사용하는 MySQL 명령 모음
Reference
이 문제에 관하여(webAPI를 만듭니다. EC2에서 DjangoRestFramework 1에서 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akidon0000/items/f7d0ca5ca0416bb5d514텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)