使用Django rest framework搭建 openapi规范api服务端记录(一):项目的搭建、models serializers和views集优化

一、安装所需库

pip install django
pip install djangorestframework
pip install drf-yasg
pip install setuptools  # drf-yasg模块需要

二、创建Django项目

django-admin startproject mysite
cd mysite
django-admin startapp api

三、配置项目

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api',          # 添加应用
    'rest_framework',   # 添加rest_framework框架
    'drf_yasg',         # 添加drf_yasg框架
]

# Django REST framework 配置
REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
}

#  添加drf_yasg的配置
SWAGGER_SETTINGS = {
    'USE_SESSION_AUTH': False,
    'PERSIST_AUTH': True,
}


# 修改语言为中文
LANGUAGE_CODE = 'zh-hans'

# 修改时区为东八区
TIME_ZONE = 'Asia/Shanghai'

四、创建模型

# 在api/models.py中创建模型
from django.db import models

class test1(models.Model):
    name = models.CharField(
        max_length=100,
        null=True, blank=True,
    )
    纬度 = models.FloatField(
        null=True, blank=True,
    )
    经度 = models.FloatField(
        null=True, blank=True,
    )
    class Meta:
        db_table = 'test1'

class test2(models.Model):
    name = models.CharField(max_length=100)
    纬度 = models.FloatField(
        null=True, blank=True,
    )
    经度 = models.FloatField(
        null=True, blank=True,
    )
    class Meta:
        db_table = 'test2'


五、创建序列化器

# 在api/serializers.py中创建序列化器
from rest_framework import serializers
from .models import test1, test2


class test1Serializer(serializers.ModelSerializer):
    class Meta:
        model = test1
        fields = '__all__'


class test2Serializer(serializers.ModelSerializer):
    class Meta:
        model = test2
        fields = '__all__'

六、创建视图

# 在api/views.py中创建视图
from rest_framework import viewsets
from .models import test1, test2
from .serializers import test1Serializer, test2Serializer


class test1ViewSet(viewsets.ModelViewSet):
    queryset = test1.objects.all()
    serializer_class = test1Serializer

class test2ViewSet(viewsets.ModelViewSet):
    queryset = test2.objects.all()
    serializer_class = test2Serializer

七、创建路由

  1. 在api/urls.py中创建路由
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import test1ViewSet
from .views import test2ViewSet

# 创建一个路由器并注册我们的视图集
router = DefaultRouter()

router.register(r'test1', test1ViewSet)
router.register(r'test2', test2ViewSet)  # 注册DianzhanViewSet

urlpatterns = [
    path('', include(router.urls)),
]


  1. mysite/urls.py中添加路由
#在mysite/urls.py中添加路由
from django.contrib import admin
from django.urls import path
from django.urls import include  # 添加include 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls'))  # 添加应用路由
]

八、创建接口文档

api/urls.py或者mysite/urls.py中添加接口文档的路由

# 在api/urls.py中添加接口文档的路由
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
    openapi.Info(
        title="BDS API",
        default_version='v1',
        description="API文档",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="contact@snippets.local"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,

    permission_classes=[],

)


urlpatterns = [
    # ...
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]

九、运行项目

# 运行项目
python manage.py runserver

十、访问接口文档

# 访问接口文档
http://localhost:8000/api/swagger/

十一、拆分管理models、serializers和views

为了更好地组织你的 Django 项目中的模型、序列化器、视图集,你可以将模型、序列化器、视图集分别存放在单独的文件目录中,并使用一个专门的目录来管理这些文件。以下是一个可能的组织方式:

   api/
   ├── migrations/
   ├── models/
   │   ├── __init__.py
   │   ├── test1.py
   │   ├── test2.py
   ├── serializers/
   ├── ├── __init__.py
   ├── ├── test1Serializer.py
   ├── ├── test2Serializer.py
   ├── views/
   │   ├── __init__.py
   │   ├── test1Viewset.py
   │   ├── test2Viewset.py
   ├── __init__.py
   ├── admin.py
   ├── apps.py
   ├── urls.py

拆分api/models.py文件

  1. 创建一个 models 目录

    在你的应用(app)目录下创建一个名为 models 的子目录。

  2. models 目录中创建模型文件
    models 目录中为每个模型创建一个单独的文件。

  • test1.py
# api/models/test1.py
from django.db import models

class test1(models.Model):
    name = models.CharField(
        max_length=100,
        null=True, blank=True,
    )
    纬度 = models.FloatField(
        null=True, blank=True,
    )
    经度 = models.FloatField(
        null=True, blank=True,
    )
    class Meta:
        db_table = 'test1'

  • tset2.py
# api/models/test2.py
from django.db import models


class test2(models.Model):
    name = models.CharField(max_length=100)
    纬度 = models.FloatField(
        null=True, blank=True,
    )
    经度 = models.FloatField(
        null=True, blank=True,

    )

    class Meta:
        db_table = 'test2'
  1. 更新 __init__.py 文件
    models 目录下的 __init__.py 文件中导入你的模型类。
# api/models/__init__.py
from .test1 import test1
from .test2 import test2

通过这种方式,你的模型文件被分开存放在 models 目录下,使项目结构更清晰,易于维护。

拆分api/serializers.py文件

你可以将 serializers.py 文件拆分成多个文件,将每个序列化器放在单独的文件中,然后在一个 __init__.py 文件中导入这些序列化器。以下是一个可能的组织方式:

  1. 创建一个 serializers 目录
    在你的应用(app)目录下创建一个名为 serializers 的子目录。

  2. serializers 目录中创建序列化器文件
    serializers 目录中为每个序列化器创建一个单独的文件。

    • test1Serializer.py

      # api/serializers/test1Serializer.py
      from rest_framework import serializers
      from ..models import test1
      
      class test1Serializer(serializers.ModelSerializer):
          class Meta:
              model = test1
              fields = '__all__'
      
    • test2Serializer.py

      # api/serializers/test2Serializer.py
      from rest_framework import serializers
      from ..models import test2
      
      class test2Serializer(serializers.ModelSerializer):
          class Meta:
              model = test2
              fields = '__all__'
      
  3. 创建 __init__.py 文件
    serializers 目录下的 __init__.py 文件中导入你的序列化器类。

    # api/serializers/__init__.py
    from .test1Serializer import test1Serializer
    from .test2Serializer import test2Serializer
    

通过这种方式,你的序列化器文件被分开存放在 serializers 目录下,使项目结构更有组织性,易于管理。

拆分api/views.py文件

views.py 文件拆分为多个文件,将每个视图集放在单独的文件中,然后在一个 __init__.py 文件中导入这些视图集。以下是一个可能的组织方式:

  1. 创建一个 views 目录
    在你的应用(app)目录下创建一个名为 views 的子目录。

  2. views 目录中创建视图集文件
    views 目录中为每个视图集创建一个单独的文件。

    • test1Siewset.py

      # api/views/test1Sieewset.py
      from rest_framework import viewsets
      from ..models import test1
      from ..serializers import tset1Serializer
      
      class test1ViewSet(viewsets.ModelViewSet):
          queryset = test1.objects.all()
          serializer_class = test1Serializer
      
    • test2Siewset.py

    # api/views/test2Sieewset.py
    from rest_framework import viewsets
    from ..models import test2
    from ..serializers import test2Serializer
    
    
    class test2ViewSet(viewsets.ModelViewSet):
        queryset = test2.objects.all()
        serializer_class = test2Serializer
    
  3. 创建 __init__.py 文件
    views 目录下的 __init__.py 文件中导入你的视图集类。

    # api/views/__init__.py
    from .test1Viewset import test1ViewSet
    from .test2Viewset import test2ViewSet
    

通过这种方式,你的视图集文件被分开存放在 views 目录下,使项目结构更有组织性,易于维护。

十二、创建数据库表

# 创建数据库表
python manage.py makemigrations
python manage.py migrate

十三、创建管理员用户

# 创建管理员用户
python manage.py createsuperuser

十四、运行项目

# 运行项目
python manage.py runserver

十五、访问接口文档

# 访问接口文档
http://localhost:8000/api/swagger/

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值