Questions tagged «django-rest-framework»

一个强大而灵活的工具包,用于构建RESTful Web API。Django是一个高级Python Web框架,鼓励快速开发和简洁实用的设计。它由经验丰富的开发人员构建,它解决了Web开发的大部分麻烦,因此您可以专注于编写应用程序而无需重新发明轮子。它是免费和开源的。

7
Django Rest Framework令牌认证
我已经阅读了《 Django Rest Framework指南》并完成了所有教程。一切似乎都有意义,并且按应有的方式工作。我得到了如上所述的基本身份验证和会话身份验证。 http://django-rest-framework.org/api-guide 但是,我在文档的令牌认证部分苦苦挣扎,它缺少或没有教程那么深入。 http://django-rest-framework.org/api-guide/authentication/#tokenauthentication 它说我需要为用户创建令牌,但是否说明了在models.py中的位置? 我的问题是: 有人可以为初学者更好地解释文档的令牌认证部分吗?

9
如何使用Django Rest Framework创建多个模型实例?
我想使用Django Rest Framework通过一个API调用来保存和更新多个实例。例如,假设我有一个“教室”模型,可以有多个“老师”。如果我想创建多位老师,然后更新他们的所有教室编号,我该怎么做?我需要为每个老师进行API调用吗? 我知道目前我们无法保存嵌套模型,但是我想知道是否可以在教师级别保存它。谢谢!


9
如何在Django REST框架中注册用户?
我正在使用Django REST框架编写REST API 。该API将成为社交移动应用程序的后端。完成本教程之后,我可以序列化所有模型,并且可以创建新资源并对其进行更新。 我正在使用AuthToken进行身份验证。 我的问题是: 获得/users资源后,我希望应用程序用户能够注册。因此,拥有像这样的单独资源/register还是允许匿名用户将其发布到/users新资源更好? 另外,有关权限的一些指导也将非常有用。

8
带有ChoiceField的Django Rest框架
我的用户模型中有一些字段是选择字段,并试图找出如何最好地将其实现到Django Rest Framework中。 下面是一些简化的代码来显示我在做什么。 # models.py class User(AbstractUser): GENDER_CHOICES = ( ('M', 'Male'), ('F', 'Female'), ) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) # serializers.py class UserSerializer(serializers.ModelSerializer): gender = serializers.CharField(source='get_gender_display') class Meta: model = User # viewsets.py class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer 本质上,我想做的是让get / post / put方法使用choice字段的显示值而不是代码,看起来像下面的JSON。 { 'username': 'newtestuser', …

5
RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label且不在INSTALLED_APPS中的应用程序中
我正在使用Django Rest Framework和AngularJs构建应用程序。我使用Django-rest-auth进行身份验证,但是我无法对其进行设置。无论如何,我正尝试在我的项目中设置此应用。我意识到我需要安装django-rest-auth-registration来使其运行,所以我按照此文档进行了以下操作: 我运行了命令 pip安装django-rest-auth 和 点安装django-allauth 我的任何settings.py如下所示: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 3rd party apps 'rest_framework', 'rest_framework.authtoken', 'rest_auth', 'allauth', 'allauth.account', 'rest_auth.registration', # My app 'myapp', ] 我还添加了身份验证后端,context_processors和正确的URL。 但是,当我尝试迁移时,终端抛出以下错误: RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label,也不在INSTALLED_APPS的应用程序中。 为什么会出现此错误,以及如何解决该错误以迁移项目?谢谢!

5
将请求上下文从Django Rest Framework中的Viewset传递给序列化器
我有一种情况,其中序列化器字段的值取决于当前登录用户的身份。我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用ViewSet时如何执行此操作,因为您仅提供序列化程序类而不提供实际的序列化程序实例。 基本上我想知道如何去: class myModelViewSet(ModelViewSet): queryset = myModel.objects.all() permission_classes = [DjangoModelPermissions] serializer_class = myModelSerializer 至: class myModelSerializer(serializers.ModelSerializer): uploaded_by = serializers.SerializerMethodField() special_field = serializers.SerializerMethodField() class Meta: model = myModel def get_special_field(self, obj): if self.context['request'].user.has_perm('something.add_something'): return something 很抱歉,如果不清楚,请参阅DOC: 添加额外的上下文 说明 serializer = AccountSerializer(account, context={'request': request}) serializer.data 但是我不确定如何从视图集中自动执行此操作,因为我只能更改序列化程序类,而不能更改序列化程序实例本身。

6
Django REST Framework自定义字段验证
我正在尝试为模型创建自定义验证,以检查它start_date是否在模型之前end_date,并且证明几乎不可能。 我尝试过的东西: 内置的Django验证程序:无需检查 像这样写我自己的: def validate_date(self): if self.start_date < self.end_date: raise serializers.ValidationError("End date must be after start date.") 我已经将这些代码添加到Serializer类(然后添加到模型)中,但是似乎在任何一个位置都没有调用它。 我也发现这个代码,可能是使用的位,但我不知道如何在我的方法-整合似乎是它的工作来验证一个模型属性,但我需要两个属性之间的检查。 我的模特: class MyModel(models.Model): created = models.DateTimeField(auto_now_add=True) relation_model = models.ForeignKey(RelationModel, related_name="mymodels") priority = models.IntegerField( validators = [validators.MinValueValidator(0), validators.MaxValueValidator(100)]) start_date = models.DateField() end_date = models.DateField() @property def is_active(self): today = datetime.date.today() return …

12
DRF:使用嵌套序列化程序进行简单的外键分配?
使用Django REST Framework,标准的ModelSerializer将允许通过将ID作为整数发布来分配或更改ForeignKey模型关系。 从嵌套序列化程序中获取此行为的最简单方法是什么? 注意,我只是在谈论分配现有数据库对象,而不是嵌套创建。 过去,我在序列化程序中使用附加的“ id”字段以及自定义create和update方法来解决这个问题,但这对我来说似乎是一个简单而频繁的问题,我很想知道最好的方法。 class Child(models.Model): name = CharField(max_length=20) class Parent(models.Model): name = CharField(max_length=20) phone_number = models.ForeignKey(PhoneNumber) child = models.ForeignKey(Child) class ChildSerializer(ModelSerializer): class Meta: model = Child class ParentSerializer(ModelSerializer): # phone_number relation is automatic and will accept ID integers children = ChildSerializer() # this one will not …

2
django-rest-framework 3.0在嵌套序列化程序中创建或更新
使用django-rest-framework 3.0并具有以下简单模型: class Book(models.Model): title = models.CharField(max_length=50) class Page(models.Model): book = models.ForeignKey(Books, related_name='related_book') text = models.CharField(max_length=500) 并给出此JSON请求: { "book_id":1, "pages":[ { "page_id":2, "text":"loremipsum" }, { "page_id":4, "text":"loremipsum" } ] } 如何编写嵌套的序列化程序来处理此JSON,并为page给定的每个JSONbook创建一个新页面或更新(如果存在)。 class RequestSerializer(serializers.Serializer): book_id = serializers.IntegerField() page = PageSerializer(many=True) class PageSerializer(serializers.ModelSerializer): class Meta: model = Page 我知道用实例化序列化程序instance会更新当前序列化程序,但是我应该如何在create嵌套序列化程序的方法中使用它呢?

4
将额外的参数传递给Django Rest Framework中的Serializer类
我想将一些参数从Viewset传递给DRF Serializer类,因此我已经尝试过: class OneZeroSerializer(rest_serializer.ModelSerializer): def __init__(self, *args, **kwargs): print args # show values that passed location = rest_serializer.SerializerMethodField('get_alternate_name') def get_alternate_name(self, obj): return '' class Meta: model = OneZero fields = ('id', 'location') 观看次数 class OneZeroViewSet(viewsets.ModelViewSet): serializer_class = OneZeroSerializer(realpart=1) #serializer_class = OneZeroSerializer queryset = OneZero.objects.all() 基本上,我想将基于查询字符串的一些值从视图传递给Serializer类,然后将这些分配给字段。 这些字段实际上不包含在“模型”中,而是动态创建的字段。 这个问题stackoverflow中的情况相同,但我无法理解答案。 在这种情况下,任何人都可以帮助我或为我提供更好的选择。

6
Django Rest Framework部分更新
我正在尝试partial_update使用Django Rest Framework进行实施,但由于我被卡住了,因此需要澄清一下。 为什么我们需要指定partial = True? 以我的理解,我们可以轻松地在partial_update方法内部更新Demo对象。这样做的目的是什么? 序列化变量里面有什么?方法变量 内部是什么?那是一个演示对象吗?在后台调用什么功能?serializedpartial_update 一个人如何在这里完成实施? 视图集 class DemoViewSet(viewsets.ModelViewSet): serializer_class = DemoSerializer def partial_update(self, request, pk=None): serialized = DemoSerializer(request.user, data=request.data, partial=True) return Response(status=status.HTTP_202_ACCEPTED) 序列化器 class DemoSerializer(serializers.ModelSerializer): class Meta: model = Demo fields = '__all__' def update(self, instance, validated_data): print 'this - here' demo = Demo.objects.get(pk=instance.id) Demo.objects.filter(pk=instance.id)\ …

5
使用Django Rest Framework返回当前用户
我目前正在使用Django开发API。 但是,我想创建一个视图,该视图返回具有以下端点的当前User:/users/current/。 为此,我创建了一个列表视图,并过滤了发出请求的用户的查询集。可以,但是结果是列表,而不是单个对象。结合分页,与其他端点相比,结果看起来过于复杂且不一致。 我也尝试创建一个详细视图并过滤查询集,但是DRF抱怨我没有提供pk或slug。 你有什么主意吗?

12
Django Rest Framework:创建对象后禁用字段更新
我试图通过Django Rest Framework API调用使我的用户模型成为RESTful,以便我可以创建用户并更新其个人资料。 但是,当我与用户一起执行特定的验证过程时,我不希望用户在创建帐户后能够更新用户名。我尝试使用read_only_fields,但这似乎在POST操作中禁用了该字段,因此在创建用户对象时我无法指定用户名。 我该如何实施呢?目前存在的API的相关代码如下。 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'password', 'email') write_only_fields = ('password',) def restore_object(self, attrs, instance=None): user = super(UserSerializer, self).restore_object(attrs, instance) user.set_password(attrs['password']) return user class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ serializer_class = …

5
Django Rest框架中的只写,只读字段
我有这样的模型: class ModelA(models.Model): name = models.CharField() class ModelB(models.Model): f1 = models.CharField() model_a = models.ForeignKey(ModelA) 序列化器: class ASerializer(serializers.ModelSerializer): model_b_ids = serializers.CharField() class Meta: model = ModelA write_only_fields = ('model_b_ids',) 意见: class AView(CreateModelMixin, GenericViewSet): def perform_create(self, serializer): model_b_ids = parse_somehow(serializer.validated_data["model_b_ids"]) #do something... 我遇到的问题是“ model_b_ids”的问题 用户应在发送帖子数据时提交它。 我在perform_create中使用它来链接到相关模型。 但是那不是ModelA中的“真实列”,因此当我尝试保存它时会引发异常。 我试图从validated_data中弹出它,但是又在无法从模型读取model_b_ids的地方再次出现错误。关于正确使用这种字段有什么想法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.