Python 如何使用Django Rest框架生成乒乓api?
我想使用Django Rest框架构建一个简单的乒乓球,所以我不需要模型。 我通过swagger(drf_yasg)查看api的状态,但找不到它的任何参数 我想创建序列化程序、视图和一些路由代码。我从终端得到了一些错误线路 序列化程序Python 如何使用Django Rest框架生成乒乓api?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想使用Django Rest框架构建一个简单的乒乓球,所以我不需要模型。 我通过swagger(drf_yasg)查看api的状态,但找不到它的任何参数 我想创建序列化程序、视图和一些路由代码。我从终端得到了一些错误线路 序列化程序 从rest\u框架导入序列化程序 类PingPongSerializer(serializers.Serializer): ping=serializers.CharField(allow_blank=True, default=“ping”, 最大长度=20,
从rest\u框架导入序列化程序
类PingPongSerializer(serializers.Serializer):
ping=serializers.CharField(allow_blank=True,
default=“ping”,
最大长度=20,
帮助(text=“请输入“ping”)
#示例_ping=乒乓序列化器({“ping”:“hoge”})
#=>{ping':'hoge'}
#示例_ping=乒乓序列化器({})
#打印(例如打印数据)
#=>{ping':'hoge'}
看法
从django.exe导入渲染
从rest_framework.views导入APIView
来自rest\u framework.response导入响应
从ping_pong.serializer导入乒乓序列化程序
#在这里创建您的视图。
类乒乓球视图(APIView):
def get(自我、请求、格式=无):
序列化程序=乒乓序列化程序(数据=请求)
打印(请求)
如果序列化程序.u有效():
打印(请求数据)
返回响应(serializer.data)
其他:
打印(序列化程序)
打印(序列化程序错误)
返回响应({'result':“我什么都不知道”})
网址
结果
{
"result": "I don't know anything"
}
错误日志
<rest_framework.request.Request object at 0x7f2ed029d850>
PingPongSerializer(data=<rest_framework.request.Request object>):
ping = CharField(allow_blank=True, default='ping', help_text="please input 'ping'", max_length=20)
{'non_field_errors': [ErrorDetail(string='Invalid data. Expected a dictionary, but got Request.', code='i
nvalid')]}
乒乓球序列化器(数据=):
ping=CharField(允许为空=True,默认为“ping”,帮助文本=“请输入“ping”,最大长度=20)
{'non_field_errors':[ErrorDetail(string='Invalid data.需要一个字典,但得到了请求',code='i
nvalid')]}
多亏了这个建议,我才找到了答案
最后的代码如下所示:
序列化程序
从rest\u框架导入序列化程序
类PingPongSerializer(serializers.Serializer):
ping=serializers.CharField(allow_blank=True,
default=“ping”,
最大长度=10,
帮助(text=“请输入“ping”)
看法
网址
来自django.contrib导入管理
从django.url导入路径
从django.conf.url导入url
从rest\u框架导入权限
从drf_yasg.views导入get_schema_视图
从drf_yasg导入openapi
从rest_框架导入路由器
从乒乓球导入视图
从django.conf.url导入包括
路由器=路由器。SimpleRouter()
路由器.寄存器(r'ping',views.pinggview,base_name='ping')
模式视图=获取模式视图(
openapi.Info(
title=“Restful API列表”,
默认版本='v1',
description=“乒乓球Api”,
license=openapi.license(name=“MIT”),
),
公共=真实,
权限\类=(permissions.AllowAny,),
)
URL模式=[
路径('admin/',admin.site.url),
#url(r“^swagger(?P\.json\.yaml)$”,模式视图。没有用户界面(缓存超时=0),name='schema-json'),
url(r“^swagger/$”,架构视图。带有ui('swagger',cache\u timeout=0),name='schema-swagger-ui'),
url(r“^redoc/$”,架构视图。带有ui('redoc',cache\u timeout=0),name='schema-redoc'),
url(r“^redoc/$”,架构视图。带有ui('redoc',cache\u timeout=0),name='schema-redoc'),
url(r'ping',views.pinggview.as_view(),name='ping'),
]
结果
参数:“ppng”
答复:
{
“结果”:“你脑子里在想什么?”
}多亏了他的建议,我才找到了答案 最后的代码如下所示: 序列化程序
从rest\u框架导入序列化程序
类PingPongSerializer(serializers.Serializer):
ping=serializers.CharField(allow_blank=True,
default=“ping”,
最大长度=10,
帮助(text=“请输入“ping”)
看法
网址
来自django.contrib导入管理
从django.url导入路径
从django.conf.url导入url
从rest\u框架导入权限
从drf_yasg.views导入get_schema_视图
从drf_yasg导入openapi
从rest_框架导入路由器
从乒乓球导入视图
从django.conf.url导入包括
路由器=路由器。SimpleRouter()
路由器.寄存器(r'ping',views.pinggview,base_name='ping')
模式视图=获取模式视图(
openapi.Info(
title=“Restful API列表”,
默认版本='v1',
description=“乒乓球Api”,
license=openapi.license(name=“MIT”),
),
公共=真实,
权限\类=(permissions.AllowAny,),
)
URL模式=[
路径('admin/',admin.site.url),
#url(r“^swagger(?P\.json\.yaml)$”,模式视图。没有用户界面(缓存超时=0),name='schema-json'),
url(r“^swagger/$”,架构视图。带有ui('swagger',cache\u timeout=0),name='schema-swagger-ui'),
url(r“^redoc/$”,架构视图。带有ui('redoc',cache\u timeout=0),name='schema-redoc'),
url(r“^redoc/$”,架构视图。带有ui('redoc',cache\u timeout=0),name='schema-redoc'),
url(r'ping',views.pinggview.as_view(),name='ping'),
]
结果
参数:“ppng”
答复:
{
“结果”:“你脑子里在想什么?”
}我想你应该通过
data=request.data
而不是data=request
谢谢!我可以得到一个新的结果。但是我看不到“ping”中的参数表…我认为您应该传递data=request.data
而不是data=request
谢谢!我可以得到一个新的结果。但我看不到参数的形式“平”在招摇。。。
{
"result": "I don't know anything"
}
<rest_framework.request.Request object at 0x7f2ed029d850>
PingPongSerializer(data=<rest_framework.request.Request object>):
ping = CharField(allow_blank=True, default='ping', help_text="please input 'ping'", max_length=20)
{'non_field_errors': [ErrorDetail(string='Invalid data. Expected a dictionary, but got Request.', code='i
nvalid')]}
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from ping_pong.serializers import PingPongSerializer
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
# Create your views here.
class PingPongView(APIView):
@swagger_auto_schema(manual_parameters=[
openapi.Parameter('ping',
openapi.IN_QUERY,
description="please input ping",
type=openapi.TYPE_STRING)
])
def get(self, request, format=None):
serializer = PingPongSerializer(data=request.GET)
if serializer.is_valid():
if serializer.data['ping'] == 'ping':
return Response({'result': 'pong'})
else:
return Response({'result': "What's in your head?"})
else:
return Response({'error': serializer.errors})