我试图了解Django RESTFramework。我已经熟悉Django。我想创建一个接受一些文本数据并处理它并将其与处理结果(以文本形式)一起返回给用户的终结点。我已经完成了有关该主题的一些教程,但是我仍然不明白它是如何工作的。这是一个正在运行的教程项目的示例。如何编辑它以实现我的目标?一切看起来都很神奇。
$deck = Deck::find("5d09525cad67b");
$deck->cards()->attach(1, ['carduser_id' => 3]);
答案 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()
来执行自定义逻辑。