【初学者指南】利用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 各パッケージ名

需要指定下载的必要软件包如下

パッケージ用途djangoDjango フレームワークdjangorestframeworkDjango REST フレームワークdjango-filterDjango REST F/W に検索機能を楽に追加できるプラグイン(※ 結局、使ってないので後で調べて追記します)django-cors-headersDjango REST F/W で作成した API をブラウザからも叩けるようにCORSに対応させるプラグイン

创建 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
python_djangoアプリテスト起動.png

应用启动成功后,请使用 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/ 时,会进入登录界面。

python_django管理画面_01.png

当您使用先前设置的管理员用户信息登录时,界面如下所示。

python_django管理画面_02.png

如果成功,则使用 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/ 时,登录页面会显示为日语。

python_django管理画面_日本語化.png

如果成功,使用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モデルのシリアライズ/デシリアライズ(データの入出力)方式を定義ViewSet取得, 一覧, 登録, 更新, 削除を管理するビュー定義URL patternDjangoにURLパターンを伝えるための定義
创建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/时,将显示如下界面。

python_django_REST_API画面.png

如果成功了,可以使用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 # 追記 (ファイル末尾)

请根据上述内容自行处理。之后可能会追加示例代码等,请先记在备忘录上。

广告
将在 10 秒后关闭
bannerAds