Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django Rest框架生成乒乓api?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何使用Django Rest框架生成乒乓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,

我想使用Django Rest框架构建一个简单的乒乓球,所以我不需要模型。 我通过swagger(drf_yasg)查看api的状态,但找不到它的任何参数

我想创建序列化程序、视图和一些路由代码。我从终端得到了一些错误线路

序列化程序

从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})