一、安装所需库
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
七、创建路由
- 在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)),
]
- 在
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
文件
-
创建一个
models
目录:在你的应用(app)目录下创建一个名为
models
的子目录。 -
在
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'
- 更新
__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
文件中导入这些序列化器。以下是一个可能的组织方式:
-
创建一个
serializers
目录:
在你的应用(app)目录下创建一个名为serializers
的子目录。 -
在
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__'
-
-
创建
__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
文件中导入这些视图集。以下是一个可能的组织方式:
-
创建一个
views
目录:
在你的应用(app)目录下创建一个名为views
的子目录。 -
在
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
-
-
创建
__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/