gpt4 book ai didi

python - 如何通过 Django Rest Framework 公开 Django-Constance 设置?

转载 作者:行者123 更新时间:2023-12-05 03:05:06 25 4
gpt4 key购买 nike

我正在构建一个项目,其中我需要一些自定义设置,这些设置可由某些无法访问 django 管理面板的用户编辑,这些用户通过 Angular 前端访问应用程序。

我安装了 django-constance 以使这些自定义设置可编辑,因为它是我在 Django packages site 上找到的最受推荐的软件包.我现在的问题是我不知道如何为我的 API rest 提供设置。

我从一些自定义 View 开始:

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)

我只会收到错误。

知道如何正确执行此操作吗?

谢谢!

最佳答案

给你一个demo

from .utils import get_settings
from constance import config
from rest_framework.viewsets import ViewSet

class SettingViewSet(ViewSet):
permission_classes = (IsAuthenticated,)

def setting(self, request, allow_settings):
if request.method == 'GET':
# list all setting items
return Response(data=get_settings(allow_settings))
else:
# change all allow setting items in allow_settings
for key in request.data:
if key in allow_settings and key in getattr(settings, 'CONSTANCE_CONFIG', {}):
value = request.data[key]
setattr(config, key, '' if value is None else value)
return Response(data=get_settings(allow_settings))

def create(self, request):
"""
<p>update with POST:<code>{'Key': new_value}</code>
"""
allow_settings = [key for key, options in getattr(settings, 'CONSTANCE_CONFIG', {}).items()]
return self.setting(request, allow_settings)

def list(self, request):
"""
get all setting item
"""
allow_settings = [key for key, options in getattr(settings, 'CONSTANCE_CONFIG', {}).items()]
return self.setting(request, allow_settings)

在 utils.py 中:

def get_settings(allow_settings):
setting_list = []
for key, options in getattr(settings, 'CONSTANCE_CONFIG', {}).items():
if key in allow_settings:
default, help_text = options[0], options[1]
data = {'key': key,
'default': default,
'help_text': help_text,
'value': getattr(config, key)}
setting_list.append(data)
return setting_list

在 urls.py 中:

router.register(r'setting', SettingViewSet, base_name='setting')

询问获取http://x.x.x.x/setting/可以获取:

[
{
"key": "staff_prefix",
"default": "",
"help_text": "工号固定代码",
"value": ""
},
{
"key": "staff_suffix",
"default": 3,
"help_text": "工号尾缀",
"value": "3"
}
]

使用数据 {'staff_prefix': 'demo'} 发布 http://x.x.x.x/setting/ 您可以更新 staff_prefix 中的值.

关于python - 如何通过 Django Rest Framework 公开 Django-Constance 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51360970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com