原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
DRF应用和管理
【DRF配置管理】Django使用DRF框架
【DRF配置管理】如何实现JWT认证
【DRF配置管理】如何在视图函数配置参数(一)
【DRF配置管理】如何在视图函数配置参数(二)
【DRF配置管理】如何在视图函数配置参数(三)
【DRF配置管理】如何在视图函数配置参数(四)
【DRF配置管理】如何建立完善的docs文档
文章目录
- DRF应用和管理
- 前言
- 一、三方依赖
- 二、项目的settings
- 三、项目urls配置
- 四、视图注释显示
- 五、请求参数显示
- 1.models参数
- 2.自定义参数
前言
DRF广泛的应用于django网络开发,尤其是在前后端分离的项目中,与vue、react等框架结合使用。本篇博客单独介绍DRF自带接口文档的使用。
一、三方依赖
这个库一般不需要单独安装,会随着pip install djangorestframework一起安装。
pip3 install coreapi
二、项目的settings
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
三、项目urls配置
from rest_framework.documentation import include_docs_urls
urlpatterns = [
...
path('docs/', include_docs_urls(title='站点页面标题', authentication_classes=[]))
]
四、视图注释显示
这里的注释一般是在类视图,主要跟继承的方法有关,本博客以ModelViewSet为例,示例如下:
class PicDatasView(ModelViewSet):
"""
list:
不带路径参数获取全部
create:
新增一条记录
retrieve:
带路径参数获取一条
update:
带路径参数更新一条
destroy:
带路径参数删除一条
"""
def list(self, request):
pass
五、请求参数显示
这里的请求参数包含两部分,第一种models参数,是使用序列化的字段参数,也是models模型的字段,第二种就是自定义参数,一般数为了后端判断,或者批量操作的列表参数等。
1.models参数
这种参数可以通过设置字段的help_text来实现,主要用于创建和修改。
models.py文件
class HistoryData(models.Model):
id = models.AutoField(primary_key=True, help_text='历史区域的主键id')
geometrycollection = models.GeometryCollectionField('混合数据', null=True, help_text='空间混合数据')
serializer.py文件
class HistoryDataSerializer(GeoModelSerializer):
"""
目标区域
"""
hid = serializers.IntegerField(source="id", read_only=True)
class Meta:
model = HistoryData
fields = ['hid', 'name', 'user_id', 'type', 'point', 'diameter', 'geometrycollection']
2.自定义参数
自定义参数需要我们自己设置,主要用于list(getall)的查询和文件下载。
views.py文件
import coreapi
import coreschema
from rest_framework.schemas import ManualSchema
class KmlDownload(ModelViewSet):
"""
list:下载文件:kml
"""
serializer_class = KmlDownloadSerializer
# 认证
authentication_classes = [IsAuthentication]
# docs文档参数
schema = ManualSchema(
description='下载文件:kml',
fields=[
coreapi.Field(name="hid", required=True, location="query",
schema=coreschema.Integer(description="历史区域主键id")),
coreapi.Field(name="pids", required=True, location="query",
schema=coreschema.Array(description="影像数据主键id的列表[1,2,3,4]"))
]
)
def list(self, request):
pass