这份报纸是我技术供词的果实,这是一个:我沉浸在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中的最终响应之间的中午。
- 视图集将在不必手动做的情况下产生所有大部分的碎屑。
- 最后,这些路线将使我们能够链接所有这些。
在下一篇文章中,我将启动此!