Post标头使用令牌 [英] Post API using Token from header

查看:119
本文介绍了Post标头使用令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用API​​发布在模型Movie中创建新条目。使用标题,我想能够POST,所以OWNER是发布它的用户。用户令牌是通过头文件发送的。

I am posting using an API to create a new entry in the model Movie. Using headers, I would like to be able to POST so the OWNER is the user who has posted it. The users token is sent via headers.

models.py

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        Token.objects.create(user=instance)

class Movie(models.Model):
    title = models.CharField("Title", max_length=10000, blank=True)
    tag = models.ManyToManyField('Tag', blank=True)
    created = models.DateTimeField("Created", auto_now_add=True)
    owner = models.ForeignKey('auth.User', blank=True, null=True)

Views.py

Views.py

class OwnerFilterBackend(filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        return queryset.filter(owner=request.user)

class AllViewSet(viewsets.ModelViewSet):
    filter_backends = (OwnerFilterBackend,)
    queryset = Movie.objects.order_by('-created',).exclude(deleted=True).exclude(typetask=2)
    serializer_class = AllSerializer

Serializers.py

class AllSerializer(serializers.ModelSerializer):
    tag = TagSerializer(many=True, read_only=True)
    class Meta:
        model = Movie
        fields = ('title', 'mail', 'pk', 'tag', 'info', 'created', 'deleted', 'status', 'typetask')

    def create(self, validated_data):
        tags_data = validated_data.pop('tag')
        movie = Movie.objects.create(**validated_data)
        for tag_data in tags_data:
            tag_qs = Tag.objects.filter(name__iexact=tag_data['name'])
            if tag_qs.exists():
                tag = tag_qs.first()
            else:
                tag = Tag.objects.create(**tag_data)
            task.tag.add(tag)
        return movie


推荐答案

您可以使用 context ['request'] 表单,默认情况下在 GenericAPIView 中提供。 http://www.django-rest-framework .org / api-guide / serializers /#includes-extra-context

You can set user using context['request'] of form, which is provided by default in GenericAPIViews. http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context

def create(self, validated_data):
    tags_data = validated_data.pop('tag')
    owner = self.context['request'].user
    movie = Movie.objects.create(owner=owner, **validated_data)
    for tag_data in tags_data:
        tag_qs = Tag.objects.filter(name__iexact=tag_data['name'])
        if tag_qs.exists():
            tag = tag_qs.first()
        else:
            tag = Tag.objects.create(**tag_data)
        task.tag.add(tag)
    return movie

这篇关于Post标头使用令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆