我正在构建一个项目,其中我需要有一些自定义设置,可由某些用户编辑,这些用户没有访问django管理面板的权限,他们通过一个Angular 前端访问应用程序。
我安装django-constance是为了让这些自定义设置可以编辑,因为它是我在Django packages site上找到的最推荐的包。我现在的问题是我不知道如何在我的API rest上提供这些设置。
我从一些自定义视图开始:
class ConstanceSettingSerializer(serializers.Serializer):
name = serializers.CharField()
value = serializers.Field()
defult_value = serializers.Field()
modified = serializers.BooleanField(read_only=True)
from constance import settings as constance_settings
class ConstanceView(APIView):
def get(self, request):
settings = constance_settings.CONFIG.items()
return Response(settings, status=status.HTTP_200_OK)
但是现在我不知道如何将这些设置正确地传递给我的序列化器。我尝试了以下方法,但没有成功:
settings_serializer = ConstanceSettingSerializer(settings)
return Response(settings_serializer.data, status=status.HTTP_200_OK)
我只得到错误。
你知道怎么做吗?
谢谢!
3条答案
按热度按时间bksxznpy1#
给你演示一下
在www.example.com中utils.py:
在www.example.com中urls.py:
询问get
http://x.x.x.x/setting/
可以得到:使用数据
{'staff_prefix': 'demo'}
发布http://x.x.x.x/setting/
,您可以更新staff_prefix
中的值。o7jaxewo2#
你的序列化器需要知道返回什么。所以对于每个字段,你可以做如下的事情:
如果你想通过PUT/POST/PATCH来改变设置,你需要在你的序列化器中重写create/update,并实现自己保存值的逻辑。
另一种方法是检查设置的存储是如何实现的。我没有使用常量设置,所以我不能说。但是如果它使用DB来存储设置,你可以为它们使用的模型实现模型序列化器。
yks3o0rb3#
如果您使用数据库后端,也可以使用序列化程序执行相同的操作:
serializer.py:
views.py:
urls.py: