首先,Django 是一个框架,这意味着它已经包含了大多数人需要的一组预定义的必要功能,有时人们会说“包含电池”。
在 REST 架构发明之前,前端和后端是紧密相关的。它们之间没有直线,很难与其他服务共享业务逻辑。
基本上我们可以说有two选项,如何使用 Django 组织前端和后端工作流程:
使用 Django 模板:
最简单、最容易的入门方法。您需要的一切都已在 Django 中呈现。让我们看一下这个简单的例子:
views.py
def index(request):
fruits = Fruit.objects.all()
render(request, 'index.html', {'fruits': fruits})
之后,您可以在模板中使用上下文中的变量,如下所示:
索引.html
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
Django 模板系统非常强大并且可自定义,如果默认模板引擎不适合您的需求,则可以选择另一个模板引擎,例如Jinja https://github.com/pallets/jinja.
您可以在那里做很多事情,但作为一般建议,所有“计算”内容都不应该存储在模板级别上,因为它会显着增加页面渲染的时间。放置业务逻辑的更好位置是视图,并且大部分数据库工作都在视图上定制经理 https://docs.djangoproject.com/en/3.0/topics/db/managers/.
对于应用程序的动态部分,您可以使用AJAX
可能来自JQuery https://jquery.com/图书馆。
使用起来也很简单forms https://docs.djangoproject.com/en/3.0/topics/forms/, Django 默认处理它csrf
保护。默认验证者 https://docs.djangoproject.com/en/3.0/ref/forms/validation/ and 模型形式 https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/给你真正的力量。
当您使用模板时,您依赖于它们,很可能您无法在其他地方重用端点,这就是您需要 REST 的原因。 Django 有一些功能可以帮助你,很可能你最终会得到django-rest-framework https://www.django-rest-framework.org/用法 这是当今 Django 中最流行的库之一。
使用REST架构:
上面的例子看起来像这样,尽管有模型视图集 https://www.django-rest-framework.org/api-guide/viewsets/#modelviewset,它为您完成了大部分样板内容:
class FruitViewSet(viewsets.ViewSet):
def list(self, request, *args, **kwargs):
fruits = Fruit.objects.all()
ser = FruitSerializer(fruits, many=True)
if not ser.is_valid():
return Response({}, status=status.HTTP_400_BAD_REQUEST)
return Response(ser.data, status=status.HTTP_200_OK)
您可以使用模型序列化器 https://www.django-rest-framework.org/api-guide/serializers/#modelserializer或者编写自己的序列化器。验证过程简单明了:
class FruitSerializer(serializers.ModelSerializer):
def validate(self, attrs):
# validate your data here
pass
class Meta:
model = Fruit
fields = '__all__'
要在网页上显示此数据,您可以使用任何您想要的东西,vanilla javascript 或任何支持当今最流行的 REST 的 javascript 框架:React https://reactjs.org/docs/getting-started.html, Angular https://angular.io/docs, Vue https://vuejs.org/.
With REST
您可以将相同的 API 用于您的 Web、移动应用程序等。最终实现一次用遍。