没有存储的 Python Django Rest Post API

Posted

技术标签:

【中文标题】没有存储的 Python Django Rest Post API【英文标题】:Python Django Rest Post API without storage 【发布时间】:2017-02-02 09:24:21 【问题描述】:

我想用 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。

我目前正试图接收以“其他”结尾的 url 并处理该 JSON 的 JSON 数据,然后再使用一些自定义 JSON 进行响应。

编辑

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

Django REST framework: non-model serializer

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

【问题讨论】:

【参考方案1】:

您可以使用他们的通用 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....

【讨论】:

感谢您的回复 - APIView 证明适合这项任务!

以上是关于没有存储的 Python Django Rest Post API的主要内容,如果未能解决你的问题,请参考以下文章

DJANGO REST API--找不到模块错误

在 Django REST 框架中使用 JWT 时,刷新令牌和访问令牌存储在哪里?

Django rest framework JWT ,删除 jwt 令牌

更改 URL 对 JSON 返回的 Django Rest 框架没有影响

在 django-rest-framework-jwt 中存储超过默认信息

Django 1.8 和 Rest Framework 3.7 的“导入错误:没有名为 urls 的模块”