webAPI를 만듭니다. EC2에서 DjangoRestFramework 1에서 환경 구축

소개



이 기사에서는 장고에서 webAPI를 만들자! 라는 기사입니다.

RDS MySQL을 사용하고 있습니다.

마지막 기사
[AWS]EC2,RDS,Django를 사용해 보았다. 1부터 환경 구축
$             <- 自分のPCターミナルでのコマンド
[ec2-user] $  <- EC2にログイン中でのコマンド
MySQL >       <- MySQLにログイン中でのコマンド
#             <- 私のコメント
>>>           <- 実行結果(出力値)

전제 조건


  • EC2, RDS, Django 연결 완료

  • 장고 프로젝트 만들기


    
    #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 명령 모음

    좋은 웹페이지 즐겨찾기