【初学者指南】利用Python 3.7 + Django 快速创建RESTful Web API的方法
前提
我在以下环境下进行了构建。
-
- マシン:MacBook Pro (Retina, 15-inch, Mid 2015)
-
- OS:macOS High Sierra (v10.13.6)
-
- Python v3.7.0 ⇨ python3 コマンドで実行(Mac なので)
- pip v18.1 ⇨ pip は pip3 コマンドで実行。pip3 install –upgrade pip で最新にしたら pip で打てた(ちなみに Windows は python -m pip install –upgrade pip のよう)
如果未构建上述中间件环境,请使用官方安装程序或其他适当工具进行安装。
操作步骤
由于我使用的是 macOS,所以我将 python 输入为 python3。请各位根据自己的情况进行转换。
使用pip安装所需的包。
首先创建一个合适的目录并打开终端,使用pip安装以下所需软件包的命令如下。
pip install 各パッケージ名
需要指定下载的必要软件包如下
创建 pip 配置文件
将安装包信息作为配置文件保留,以便稍后在其他环境中可以批量安装。
pip freeze > requirements.txt
如果需要的话,可以删除版本,因为生成的配置文件已经明确指定了版本(不删除也可以)。
创建项目
django-admin startproject demo_app
在目录中创建了一个名为 demo_app 的文件夹。在这种情况下,最终会创建两个同名的嵌套文件夹,但最上层的 demo_app 对程序没有影响,所以可以随意更改。而内部创建的 demo_app 对程序有影响,所以不要轻易更改。
创建应用程序
进入已创建的项目并创建应用程序。
cd demo_app
python3 manage.py startapp sample_app
创建数据库
DB設定(setting.py)保持默认设置(使用SQLite),没有特别更改。此外,以下是已设置的位置。
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
创建数据库
python3 manage.py migrate
如果不这样做,当应用程序启动时在寻找django_session表的时候将会发生错误。
将临时文件从版本控制中移除(非必要操作)。
只有认为有必要的人才做以下的工作,请不必进行。
如果你在Git中进行版本管理,并且希望将迁移产生的文件从目标中排除,你可以新建一个.gitignore文件,并按照以下方式填写其内容。
# Python cache files
__pycache/
*.pyc
# SQLite
db.sqlite3
测试启动Web应用程序
在3000端口启动Web应用程序
python3 manage.py runserver 3000
应用启动成功后,请使用 Ctrl + C 命令来结束应用。
创建一个模型应用程序
在已建立的应用程序模型中添加一个类
from django.db import models
### ここから下を追加 ###
class Test(models.Model):
title = models.CharField(max_length=140, blank=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
将应用程序添加到setting.py中。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sample_app', # 作成したアプリケーションを追加
]
应用程序设置更改应用于数据库。
创建用于应用模型更改的迁移。
python3 manage.py makemigrations
将模型更改应用于数据库中
python3 manage.py migrate
创建管理员用户
python3 manage.py createsuperuser
用戶名、電子郵件地址和密碼可以隨意選擇。
如果密碼安全性較低,則會出現”繞過密碼驗證並創建用戶”的提示,但只需回答”是”即可繼續創建。
创建管理员页面 (CJC: zhě
from django.contrib import admin
### ここから下を追加 ###
from .models import Test
admin.site.register(Test)
再次启动Web应用程序。
尝试在3000端口启动Web应用程序。
python3 manage.py runserver 3000
当使用网页浏览器访问 http://localhost:3000/admin/ 时,会进入登录界面。
当您使用先前设置的管理员用户信息登录时,界面如下所示。
如果成功,则使用 Ctrl + C 结束应用程序
将应用本地化
请把应用程序的语言设置为日语,时区设置为”亚洲/东京”。请在setting.py文件中按以下方式修改。
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/
LANGUAGE_CODE = 'ja' # 'en-us' を修正
TIME_ZONE = 'Asia/Tokyo' # 'UTC' を修正
USE_I18N = True
USE_L10N = True
USE_TZ = True
重新启动Web应用程序的测试。
在3000号端口上启动Web应用
python3 manage.py runserver 3000
当访问 http://localhost:3000/admin/ 时,登录页面会显示为日语。
如果成功,使用Ctrl + C来退出应用程序。
引入REST API框架。
将 Django REST Framework 添加到 setting.py 中
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 追記
'sample_app',
]
创建模型的 REST API 定义
为创建针对模型的 REST API,需创建以下定义。
创建Serializer定义文件
在应用程序目录下创建一个名为serializer.py的文件,并编写以下内容。
from rest_framework import serializers
from .models import Test
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = Test
fields = ('id', 'title', 'created_at')
创建ViewSet定义文件
修改应用程序目录下的views.py文件
from django.shortcuts import render
### ここから下を追加 ###
import django_filters
from rest_framework import viewsets, filters
from .models import Test
from .serializer import TestSerializer
class TestViewSet(viewsets.ModelViewSet):
queryset = Test.objects.all().order_by('-created_at')
serializer_class = TestSerializer
创建URL模式定义文件
只需要一个选项,用中文将以下内容重新表达:
对于与项目名称相同的现有目录下的 urls.py 进行如下修改
from django.contrib import admin
from django.urls import path, include # include を追加
from sample_app.urls import router as sample_app_router # 追加
urlpatterns = [
path(r'admin/', admin.site.urls), # 修正
path(r'api/', include(sample_app_router.urls)), # 追加
]
在应用程序目录下创建一个新的urls.py文件。
from rest_framework import routers
from .views import TestViewSet
router = routers.DefaultRouter()
router.register(r'sample', TestViewSet)
再次启动Web应用程序。
试试在3000号端口上启动Web应用程序。
python3 manage.py runserver 3000
当您在Web浏览器中访问http://localhost:3000/api/时,将显示如下界面。
如果成功了,可以使用Ctrl + C来关闭应用程序。
在这个阶段,只有允许访问 http://localhost:3000/admin/ 和 http://localhost:3000/api/,所以无法访问 http://localhost:3000/。它已经成为了一个包括 API 和管理界面的应用程序。
如果出现访问被拒绝等错误,请尝试通过终端等方式升级markdown版本,因为可能是markdown版本过旧。
为了使 API 可以通过浏览器等方式调用,需要先进行 CORS 许可处理。
在setting.py文件中按以下方式添加
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders', # 追記
'sample_app',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 追記 (CommonMiddleware より前に)
'django.middleware.locale.LocaleMiddleware', # 追記 (CommonMiddleware より前に)
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
... # (中略)
# CORS 対応
CORS_ALLOW_CREDENTIALS = True # 追記 (ファイル末尾)
CORS_ORIGIN_ALLOW_ALL = True # 追記 (ファイル末尾)
请根据上述内容自行处理。之后可能会追加示例代码等,请先记在备忘录上。