gpt4 book ai didi

android - DRF(django-rest-framework)和TokenAuthentication,如何根据Token自动填充json字段?

转载 作者:行者123 更新时间:2023-11-29 19:34:23 26 4
gpt4 key购买 nike

settings.py

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
}

序列化器.py

class UserSerializer(serializers.ModelSerializer):
related_postwriter = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = User
fields = ('id', 'username', 'email', 'related_postwriter')

class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('id', 'created_date', 'author', 'text', 'image')
def create(self, validated_data):
validated_data['author'] = self.context['request'].user
return super(PostSerializer, self).create(validated_data)

模型.py

class Post(models.Model):
author = models.ForeignKey(User, related_name='related_postwriter')
text = models.TextField(blank = False)
image = models.ImageField(null = False, blank = False, upload_to='images')
created_date = models.DateTimeField(
default=timezone.now
)

def __str__(self): # __unicode__ on Python 2
return self.text

views.py

class PostViewSet(viewsets.ModelViewSet):
serializer_class = PostSerializer
permission_classes = [IsAuthenticated]
queryset = Post.objects.all()

我必须为 json 请求和 json 响应制作这个 RESTful api。当我为 Android 应用程序使用这个 RESTful api 时,我了解到我登录并从 RESTful api 获取 Token,然后该 Token 用于通过 Header 将数据发布到 RESTful api。

作为 postman 捕获,

enter image description here

我必须在 Body 上填写 "author":"number"。我认为这个数字意味着用户在我的 RESTful api 上注册订单。从上面的捕获中,该作者是我的 RESTful api 的第一个用户。

如果我将作者字段设为空,它会返回

{
"author": [
"This field is required."
]
}
  1. 如何使用 Token(或其他不使用 Token 的方式)自动填写“作者”部分?

  2. 如何获取 json 响应 "author":"some alphabet name readable",而不是 "author":"1 or 2 like number" 作为捕获。我想要像 "author":"stackoverflowman" 这样的形式。

最佳答案

对于你的第一个问题,你应该在PostViewSet中添加这个函数:

def perform_create(self, serializer):
serializer.save(author=self.request.user)

对于你的第二个问题,你应该从 PostSerializer 调用 UserSerializer:

class PostSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only=True)

class Meta:
model = Post
fields = ('id', 'created_date', 'author', 'text', 'image')

编辑

如果你只想要一个字段,你可以用source声明一个字段:

class PostSerializer(serializers.ModelSerializer):
author = serializers.ReadOnlyField(source='author.username')

class Meta:
model = Post
fields = ('id', 'created_date', 'author', 'text', 'image')

关于android - DRF(django-rest-framework)和TokenAuthentication,如何根据Token自动填充json字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39425303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com