创建webAPI。在EC2上使用DjangoRestFramework进行从头开始的环境搭建

首先

这篇文章介绍了如何使用Django创建Web API的方法!

我们正在使用RDS的MySQL。

上一篇文章中,我尝试使用[AWS]EC2、RDS和Django进行环境搭建。

$             <- 自分のPCターミナルでのコマンド
[ec2-user] $  <- EC2にログイン中でのコマンド
MySQL >       <- MySQLにログイン中でのコマンド
#             <- 私のコメント
>>>           <- 実行結果(出力値)

前提条件 tí

    EC2,RDS,Djangoの接続完了済

创建Django项目。


#testDjangoというプロジェクトを作成する
[ec2-user] $ django-admin startproject testDjango

[ec2-user] $ cd
[ec2-user] $ cd testDjango

请查阅前文[2.2]和[2.5]。

使用FileZilla编辑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

顺序的重要性


...
()
...

#変更
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

Django配置

创建模型


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

我会试着确认一下。(Wǒ huì shì zhe .)


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进行传输。

    シリアライズとは、ソフトウェア内部で扱っているデータをそのまま、保存したり送受信することができるように変換することです。

from rest_framework import serializers
from polls.models import User


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'name', 'mail')

实现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。

请也新建一个。


from django.urls import path
from polls import views

urlpatterns = [
    path('user/', views.user_list),
]

将连接到大元的urls.py文件。


from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('polls.urls')),
]

这样设置就结束了。

考试

我会在本地搭建服务器
如果对于“本地”一词不清楚的话,以下的文章会很容易理解
在部署之前先了解一下django是由谁驱动的


[ec2-user] $ cd
[ec2-user] $ cd testDjango

[ec2-user] $ python manage.py runserver

随后使用Google Chrome或类似的浏览器进行操作。


http://(EC2のオープンIPアドレス)/user/

当在搜索时


[]

我想空括号会回来

将数据放进。

由于现状不便,让我们下载GoogleChrome浏览器的扩展程序ARC。

高级REST客户端下载

当尝试使用GET进行通信时,会返回一个空括号。

スクリーンショット 2020-10-21 14.01.45.png

我尝试使用POST进行通信。在这过程中


{"name":"tanaka","mail":"T@gmail.com"}

我会添加这个信息。

スクリーンショット 2020-10-21 14.07.27.png

按下发送按钮后会收到回应。

スクリーンショット 2020-10-21 14.10.35.png

你可以尝试通过GET请求确认是否成功注册。

另外,数据库也是如此


MySQL > use dbtest;
MySQL > SELECT * FROM polls_user;
>>>
+----+----------------------------+--------+-------------+
| id | created                    | name   | mail        |
+----+----------------------------+--------+-------------+
|  1 | 2020-10-21 05:10:23.730602 | tanaka | T@gmail.com |
+----+----------------------------+--------+-------------+

我已成功完成注册。

最后

希望这篇文章能对某人有所帮助。

参考网站

在下面和本文中,我介绍了一个非常有参考价值的网站。非常感谢。

[1]. Django REST framework教程 第一部分
[2]. django由谁驱动?(部署的概览)
[3]. 【学习笔记】关于Makemigrations和Migrate
[4]. 常用的MySQL命令集

bannerAds