在django rest框架api中通过请求标题发布device_id
我想通过下面的请求标题发布device_id是我的代码,但我无法发布它。我通过postman中的标题发送device_id。在django rest框架api中通过请求标题发布device_id
PLZ避免的间距
views.py
class DeviceID(APIView):
def post(self, request):
device_id = request.META.get('HTTP_X_DEVICE', '')
serializer = DeviceSerializer(data=device_id)
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors)
serializers.py
class DeviceSerializer(serializers.ModelSerializer):
DEVICE = serializers.IntegerField()
class Meta:
model = Device
fields = 'DEVICE'
def create(self, validated_data):
return Device.objects.create(**validated_data)
models.py
class Device(models.Model):
DEVICE = models.IntegerField()
urls.py
url(r'^device/', views.DeviceID.as_view()),
序列化程序需要数据字典。将串行器实例化更改为:
serializer = DeviceSerializer(data={'DEVICE': device_id})
串行器'字段'应该是一个列表。现在序列化器正在期待字段('D','E','V','I','C','E') - 所以序列化器忽略它接收到的DEVICE值。相反,('DEVICE',)
序列化程序中传递的数据必须是字典。
你在邮递员中使用什么标题名称? Django在所有头文件中加上了HTTP_前缀 - 甚至已经以HTTP_开头的文件头__
您不需要将DEVICE字段显式定义为serialzer上的IntegerField。 ModelSerializers从模式推断字段类型。
您不需要在ModelSerializer上指定'create'。它已经为你处理了。
而不是做return Response(errors)
,你可以做serialzer.is_valid(raise_exception=True)
和框架将自动返回400串行器错误的响应代码。
以$结束URL模式,否则会出现不需要的副作用,例如/ device/ghhffffghghnfrrdxc路由到您的视图,而不是404。
我改变了我的代码,现在我在我的'HTTP_X_HEADER_DEVICE'代码和邮递员在标题中,但它给这个错误{ “设备”:[ “有效的整数是必需的。” ] } –
您使用什么值称为“HEADER_DEVICE”头?我认为这是一个有效的整数? – rikAtee
我正在使用有效的整数。我试图通过传递没有值来测试它,它仍然显示相同的错误。我的代码和上面一样,我做了一些修改,比如传递一个字典 –
感谢这是准确的 –
你能告诉我如何将这个设备id包含在我的request.data中并将它传入串行器。这是代码device_id = request.META.get('HTTP_DEVICE','') serializer = UserSerializer(data = request.data) –
感谢您的帮助 –