gpt4 book ai didi

不带存储的 Python Django Rest Post API

转载 作者:行者123 更新时间:2023-11-30 22:49:39 24 4
gpt4 key购买 nike

我想使用 Python 和 Django Rest 框架创建一个 Web api。到目前为止,我读过的教程结合了模型和序列化器来处理和存储数据。我想知道是否有一种更简单的方法来处理发布到我的 api 的数据,然后返回 JSON 响应而不存储任何数据。

目前,这是我的 urls.py

from django.conf.urls import url
from rest_framework import routers
from core.views import StudentViewSet, UniversityViewSet, TestViewSet

router = routers.DefaultRouter()
router.register(r'students', StudentViewSet)
router.register(r'universities', UniversityViewSet)
router.register(r'other', TestViewSet,"other")

urlpatterns = router.urls

这是我的观点.py

from rest_framework import viewsets
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import University, Student
from .serializers import UniversitySerializer, StudentSerializer

import json
from django.http import HttpResponse

class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer

class UniversityViewSet(viewsets.ModelViewSet):
queryset = University.objects.all()
serializer_class = UniversitySerializer

class TestViewSet(viewsets.ModelViewSet):
def retrieve(self, request, *args, **kwargs):
return Response({'something': 'my custom JSON'})

关于学生和大学的前两部分是在遵循 Django 设置教程后创建的。我不需要它提供的创建、编辑和删除对象的功能。我尝试使用我创建的 TestViewSet。

我目前一直在尝试接收发布到以“other”结尾的 URL 的 JSON 数据,并在使用一些自定义 JSON 进行响应之前处理该 JSON。

编辑

除了提供的解决方案之外,这两个链接也很有帮助:

Django REST framework: non-model serializer

http://jsatt.com/blog/abusing-django-rest-framework-part-1-non-model-endpoints/

最佳答案

您可以使用他们的通用 APIView类(它没有任何模型或序列化器的附件),然后根据 HTTP 请求类型自行处理请求。例如:

class RetrieveMessages(APIView):
def post(self, request, *args, **kwargs):
posted_data = self.request.data
city = posted_data['city']
return_data = [
{"echo": city}
]
return Response(status=200, data=return_data)

def get....

关于不带存储的 Python Django Rest Post API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com