如何接受表单数据并将其与Django RESTFramework中的某些处理结果一起返回?

时间:2019-06-17 12:25:30

标签: django django-rest-framework

我试图了解Django RESTFramework。我已经熟悉Django。我想创建一个接受一些文本数据并处理它并将其与处理结果(以文本形式)一起返回给用户的终结点。我已经完成了有关该主题的一些教程,但是我仍然不明白它是如何工作的。这是一个正在运行的教程项目的示例。如何编辑它以实现我的目标?一切看起来都很神奇。

$deck = Deck::find("5d09525cad67b");
$deck->cards()->attach(1, ['carduser_id' => 3]);

2 个答案:

答案 0 :(得分:1)

好的,我认为您是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.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')),

]

就是这样。这就是django rest中流程的工作方式,您可以通过这种方式处理数据和显示数据。有关更多详细信息,请参阅django rest文档。

答案 1 :(得分:0)

但这与您使用普通Django所做的没有任何不同。您的SnippetDetail视图只是一个基于类的视图,并且与任何基于类的视图一样,如果您想执行特定的操作,则可以覆盖相关方法。在您的情况下,您可能希望在接收到PUT请求更新数据时重写update()来执行自定义逻辑。