我试图理解Django RESTFramework。我已经熟悉Django了。我想创建一个端点,它接受一些文本数据并对其进行处理,并将其与处理结果(文本形式(一起返回给用户。我已经完成了几个关于该主题的教程,但我仍然不明白它是如何工作的。下面是一个工作教程项目的示例。如何编辑它以实现我的目标?这一切看起来都是自动的。
# views.py
from rest_framework import generics
from .models import Snippet
from .serializers import SnippetSerializer
class SnippetList(generics.ListCreateAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
# Here I would like to accept form data and process it before returning it along with the
# results of the processing.
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
好的,我认为您是 Django rest 的新手,并尝试了解它的流程,以便我可以通过订阅计划的示例来解释它。
首先,在 models.py 文件中创建一个模型
from django.db import models
class SubscriptionPlan(models.Model):
plan_name = models.CharField(max_length=255)
monthly_price = models.IntegerField()
yearly_price = models.IntegerField()
然后在 view.py 文件中创建视图,例如
from rest_framework.views import APIView
class SubscriptionCreateAPIView(APIView):
serializer_class = SubscriptionSerializer
def post(self, request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(
{'message': 'Subscription plan created successfully.',
'data': serializer.data},
status=status.HTTP_201_CREATED
)
然后定义一个用于验证的序列化程序和字段,我们可以在其中验证哪些字段将包含在请求和响应对象中。serializers.py
from rest_framework import serializers
from .models import SubscriptionPlan
class SubscriptionSerializer(serializers.ModelSerializer):
plan_name = serializers.CharField(max_length=255)
monthly_price = serializers.IntegerField(required=True)
yearly_price = serializers.IntegerField(required=True)
class Meta:
model = SubscriptionPlan
fields = (
'plan_name', 'monthly_price', 'yearly_price',
)
def create(self, validated_data):
return SubscriptionPlan.objects.create(**validated_data)
现在在 src/subsciption_module/urls 中添加 url.py
from django.urls import path
from .views import SubscriptionCreateAPIView
app_name = 'subscription_plan'
urlpatterns = [
path('subscription_plan/', SubscriptionCreateAPIView.as_view()),
]
最后,在主 url 所在的根 urls.py 文件中包含模块 url。它将是包含 settings.py 和 wsgi.py 文件的同一目录。src/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('src.subscription_plan.urls', namespace='subscription_plan')),
]
就是这样。这就是 flow 在 django rest 中的工作方式,你可以通过这种方式处理数据和显示数据。有关更多详细信息,您可以参考 django rest 文档。
但这与你对普通 Django 所做的没有任何不同。您的 SnippetDetail 视图只是一个基于类的视图,与任何基于类的视图一样,如果要执行任何特定操作,则会覆盖相关方法。在您的情况下,您可能希望在收到更新数据的 PUT 请求时重写update()
以执行自定义逻辑。