Python日记| #9。选择颜色:飞行
#spanish #python #开发日志

这份报纸是我技术供词的果实,这是一个:我沉浸在el curso de desarrollo web con Python y Django中;至少一段时间以来,这使我离开了Fastapi。

项目重构

一方面,FastApi的文件夹和依赖项,然后用Django和Drf(Django Rest Framework)代替它们。他们可以在我的repositorio中访问最终项目。

在另一个上,组装了一个名为“ API”的应用程序,其中包含所有模型,连续化器,视图和Demians。

模型

用于投票和颜色,在型号中定义了两个:

class Color(models.Model):
    name = models.CharField(max_length=10)

    def __str__(self):
        return self.name


class Vote(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, unique=True)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.user} voted to {self.color}"

Django管理员

要通过Django的管理员添加它们,我将它们包括在Admin.py中:

from .models import Vote, Color

admin.site.register([Vote, Color])

连续化器

DRF具有一个组件,可让您控制我们将在API中返回的模型的信息。在serializers.py中定义了我需要的两个:

from rest_framework.serializers import ModelSerializer
from .models import Vote, Color


class ColorSerializer(ModelSerializer):
    class Meta:
        model = Color


class VoteSerializer(ModelSerializer):
    class Meta:
        model = Vote
        depth = 1

depth属性= 1 允许投票响应包含在颜色内部。如果您没有放置此属性,只需返回将其关联的ID即可。这是我们以前在投票模型中定义的内容:

color = models.ForeignKey(Color, on_delete=models.CASCADE)

视图集

视图集是将谎言视图汇集在一个地方相关的班级。这是一个高级抽象,可让您为具有类的某个模型定义一组视图(获取,发布,张贴,删除等)。

具有两个基本和强制性属性,它们是 querySet ,它定义了我们要使用的数据;和 serializer_class ,将适用于它们的序列化器。

就我而言,我有两种型号,两个串行化器,当然,我需要两个视图集:

class ColorViewSet(viewsets.ModelViewSet):
    queryset = Color.objects.all()
    serializer_class = ColorSerializer


class VoteViewSet(viewsets.ModelViewSet):
    queryset = Vote.objects.all()
    serializer_class = VoteSerializer

当然,如果不映射正确的路线,这将无法工作。

路线管理

首先,我们创建一个路由器对象,该对象将通过注册所有 register 带有其相应的视图集。

最后,我们生成了著名的 urlpatterns 列表,然后通过它 router.urls ,它将包含视图集生成的自动路由数组。

from rest_framework import routers
from .views import ColorViewSet, VoteViewSet


router = routers.DefaultRouter()

router.register('colors', ColorViewSet, 'colors')
router.register('votes', VoteViewSet, 'votes')

urlpatterns = router.urls

我们还必须在项目的 urls.py 中包括:

from django.urls import path, include

urlpatterns = [
    (...),
    path('api/', include('api.urls'))
]

代码太多,组件太多

您最初可能会吓到太多实施,尤其是如果您在其他技术中看到Flash或开发API时。但是现实是,Django中的所有内容都有一个适当的解释,我现在将详细介绍:

  • 这些模型是我们BD的窗口,这是使用ORM的持久性模型的最忠实表示。
  • django管理员是可选的,但在我看来,这并不取决于实施整个API以证明模型的Libic。
  • 串行序列非常强大,并相信我在这个示例中我仍然没有挤压它们。它们就像我们的模型和API中的最终响应之间的中午。
  • 视图集将在不必手动做的情况下产生所有大部分的碎屑。
  • 最后,这些路线将使我们能够链接所有这些。

在下一篇文章中,我将启动此!