首页 > 解决方案 > 如何确保数据来自 Django 中的登录用户?

问题描述

我正在尝试将我从 Arduino 收到的数据保存在数据库中。我们已成功接收和存储温湿度数据,但未能将这些数据与登录用户关联。你能帮助我吗?这是我的代码。

视图.py

from .models import arduino
from .serializers import arduinoSerializers
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from rest_framework.generics import CreateAPIView

class arduinoToAndroidViewSet (ViewSet) :
    def dataSend (self, request) :
        user = self.request.user
        queryset = arduino.objects.filter(name = user)
        serializer = arduinoSerializers(queryset, many=True)
        return Response(serializer.data)

class arduinoToDatabaseViewSet (CreateAPIView) :
    serializer_class = arduinoSerializers

    def get_queryset(self) :
        user = self.request.user
        return arduino.objects.filter(name = user)

    def dataReceive(self, request) :
        queryset = get_queryset()
        serializer = arduinoSerializers(queryset, many=True)
        if serializer.is_valid() :
            serializer.save()
        return Response(serializer.data)

序列化程序.py

from rest_framework import serializers
from .models import arduino

class arduinoSerializers (serializers.ModelSerializer) :
    name = serializers.CharField(source='name.username', read_only=True)
    class Meta :
        model = arduino
        fields = ('name', 'temp', 'humi')

在此处输入图像描述

如果你这样发,

在此处输入图像描述

我想让你知道这是根的数据。 在此处输入图像描述 我登录测试帐户,输入数据,然后按发布按钮。 在此处输入图像描述 这不会迁移到“测试”帐户。我想与“测试”帐户一起迁移此数据。

标签: djangodjango-rest-frameworkdjango-viewsdjango-serializerdjango-rest-auth

解决方案


您可以使用权限来限制访问

并将用户链接到您的数据,添加 perform_create 函数(我假设名称字段是用户的 FK)

from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import CreateAPIView


class arduinoToDatabaseViewSet(CreateAPIView):
    permission_classes = [IsAuthenticated]  # only logged in users has access to this view

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

推荐阅读