- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Django serializers
和有什么区别对比 rest_framework serializers
?
我制作了一个 webapp,我希望 API 成为项目创建的主要应用程序的一部分。不为 API 功能创建单独的应用程序。我需要为 Django View 和模型使用哪个序列化程序,同时对 API 有效?
from django.core import serializers
from rest_framework import serializers
最佳答案
tl;博士
如果您只想创建一些非常小的 API 端点并且不想使用 DRF,you're better off manually building the dictionaries . Django 核心序列化器不适用于外部消费者。
您可以在项目中使用相同的主应用程序,并使其与 DRF 并行工作。只需添加 serializers.py
包含定义的文件,在相同的 views.py
中添加 DRF 逻辑文件并进行路由。您可以使用 function based views .
差异的详细说明
假设您有以下模型
class Employee(models.Model):
identification_number = models.CharField(max_length=12)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
并且您想创建一个端点
/employees/
以 JSON 表示返回所有此类对象
{
"first_name": "Jon",
"last_name": "Skeet"
}
from django.core import serializers
from django.http import HttpResponse
class EmployeeView(View):
def get(self, request):
employees = Employee.objects.all()
serialized = serializers.serialize(
'json',
employees,
fields=('first_name', 'last_name'),
)
return HttpResponse(serialized)
你得到的结果将是一个形式的字典列表
{
"fields" : {
"first_name" : "Jon",
"last_name" : "Skeet"
},
"model" : "employees.Employee",
"pk" : 12
}
但这不是我们要找的。 Django 核心序列化程序旨在
serialize models as representations of what's in the database .
the dumpdata
command uses it 的事实清楚地表明了这一点。 .
python manage.py dumpdata employees.Employee | json_pp
[
{
"fields" : {
"identification_number" : "20201293",
"first_name" : "Jon",
"last_name" : "Skeet"
},
"model" : "employees.Employee",
"pk" : 12
}
]
现在,当然你可以对你的代码做一些事情来得到你想要的表示,但是
此模块不适用于供外部使用者使用的 API View .
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = (
'first_name',
'last_name',
)
并且,尝试仅使用 DRF 最基本的序列化-反序列化功能,我们会得到
from rest_framework.renderers import JSONRenderer
from django.http import HttpResponse
class EmployeeView(View):
def get(self, request):
employees = Employee.objects.all()
serialized = EmployeeSerializer(employees, many=True)
json_representation = JSONRenderer().render(serialized.data)
return HttpResponse(json_representation)
并导致我们正在寻找的表示。
from rest_framework import viewsets
class EmployeeViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Employee.objects.all()
serializer_class = EmployeeSerializer
它负责所有样板文件,因此非常方便,并且与 Django 核心序列化程序相比,这确实适用于外部消费者。
关于python - Django 序列化器与 rest_framework 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60909380/
我有一个 API 端点,它将使用 rest_framework 的 serializer.is_valid() 进行输入验证。它将返回自定义错误消息和响应。 serializer = FormSeri
我有一个名为 UserViewSet 的类: class UserViewSet(viewsets.ModelViewSet): queryset = UserData.objects.all
无法完成 rest_framework.authtoken 的迁移 Running migrations for authtoken: - Migrating forwards to 0001_ini
我注意到 Serializer 在拒绝带有未知字段的输入时并不是很严格: In [1]: from rest_framework import serializers In [2]: class Te
我正在尝试将我的 django 1.9 升级到 django 2.0。它对 GET() 工作正常,但在 POST() 中出现错误。我的 views.py 是:- class AccountInfoUp
这是一个简单的问题,但我对 django-rest-framework 很陌生。 我想知道是否有任何方法可以从序列化程序访问模型上定义的方法。? 说我有一个模型 class Listing(model
Django serializers 和有什么区别对比 rest_framework serializers ? 我制作了一个 webapp,我希望 API 成为项目创建的主要应用程序的一部分。不为
这是我的models.py的一部分: class Discount(models.Model): discount_id = models.AutoField(primary_key=True
在我的 View 函数中,我想返回一个 json 对象 (data1) 和一些文本/html(表单)。这可能吗? 我的代码 @api_view(['POST']) @permission_classe
当我按照 this tutorial 尝试使用 django rest 框架过滤器时出现错误.当我尝试导入库时出现错误: from django_filters.rest_framework impo
这是我的settings.py: INSTALLED_APPS = [ 'rest_framework', 'django.contrib.admin', 'django.co
我正在尝试创建一个继承自 permissions.BasePermission 的自定义权限类。我知道您可以覆盖自定义消息的 message 属性,但也可以覆盖 http 状态吗?我想为过期的链接返回
我怎样才能让 django 消息框架与 rest_framework 一起工作? 这是我的观点 @api_view(['GET', 'POST']) def myview(request):
我正在尝试为我的 Django REST API 设置 OAuth2 身份验证系统(使用 DjangoRestFramework 和 Django-Oauth-Toolkit)。我是按照官方文档写的,
我正在尝试运行 longclaw,但出现错误 $ python manage.py makemigrations catalog home Traceback (most recent call la
我正在尝试将几个文件发送到我的后端: class AccountsImporterTestCase(APITestCase): def test(self): data = [
我在 django docker 容器中的 virtualenv 中使用 pip 安装了带有 markdown 和 django filter 的 djangorestframework,通过 pip
我在 pythonanywhere.com 上部署我的应用程序时遇到问题。我已按照说明通过运行以下命令通过 pip 安装 teh django rest frameowrk 包 pip install
我有一个 API 需要以列表的形式返回一个 QuestionQueue 及其关联的 Question 对象。我让它工作得很好,它按照我想要的方式返回数据: class QuestionQueueSer
我是 Django 框架和 Django REST 框架的新手,但我可以运行基本设置和实现。当我为单个对象调用域时,它就像一个魅力,例如http://mydomain.com/location/1 (
我是一名优秀的程序员,十分优秀!