简体   繁体   中英

How to save header request using REST framework

I'm using django 3.0.7 and Django Rest Framework

my models.py looks like this:

class BlogPost(models.Model):
        title                           = models.CharField(max_length=50, null=False, blank=False)
        body                            = models.TextField(max_length=5000, null=False, blank=False)
        header                          = models.TextField(max_length=5000, null=False, blank=False)
        image                           = models.ImageField(upload_to=upload_location, null=False, blank=False)
        date_published          = models.DateTimeField(auto_now_add=True, verbose_name="date published")
        date_updated            = models.DateTimeField(auto_now=True, verbose_name="date updated")
        author                          = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        slug                            = models.SlugField(blank=True, unique=True)

        def __str__(self):
                return self.title

serializers.py :

class BlogPostSerializer(serializers.ModelSerializer):

    class Meta:
        model = BlogPost
        fields = ['title', 'body', 'image', 'date_updated', 'username']

views.py :

@api_view(['POST'])
def api_create_blog_view(request):

    blog_post = BlogPost(author=request.user)

    if request.method == 'POST':
        serializer = BlogPostSerializer(blog_post, data=request.data)
        data = {}
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

I need to save header in "header" database field, i tried to save somehow like this:

serializer = BlogPostSerializer(blog_post, data=request.data, header=request.META)

but it's didn't work

What you are doing is on the right track.
HttpRequest.META gives a dictionary containing all available HTTP headers. You could also use HttpRequest.headers , it is a simpler way to access all HTTP-prefixed headers, plus CONTENT_LENGTH and CONTENT_TYPE.

You could save the value after the is_valid() check.

@api_view(['POST'])
def api_create_blog_view(request):

    blog_post = BlogPost(author=request.user)

    if request.method == 'POST':
        serializer = BlogPostSerializer(blog_post, data=request.data)
        data = {}
        if serializer.is_valid():
            serializer.save(header=request.headers)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM