创建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进行通信时,会返回一个空括号。

我尝试使用POST进行通信。在这过程中
{"name":"tanaka","mail":"T@gmail.com"}
我会添加这个信息。

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

你可以尝试通过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命令集