AGr*_*o12 5 python django rest django-rest-framework
我正在构建一个项目,其中需要一些自定义设置,这些设置可由某些无法访问 django 管理面板的用户编辑,这些用户通过 Angular 前端访问应用程序。
我安装了 django-constance 是为了让这些自定义设置可编辑,因为它是我在Django 包网站上找到的最推荐的包。我现在的问题是我不知道如何在我的 API 休息上提供设置。
我从一些自定义视图开始:
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)
Run Code Online (Sandbox Code Playgroud)
但现在我不知道如何将这些设置正确传递给我的序列化器。我尝试了这个但没有成功:
settings_serializer = ConstanceSettingSerializer(settings)
return Response(settings_serializer.data, status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)
我只收到错误。
知道如何正确执行此操作吗?
谢谢!
给你一个演示
\n\nfrom .utils import get_settings\nfrom constance import config\nfrom rest_framework.viewsets import ViewSet\n\nclass SettingViewSet(ViewSet):\n permission_classes = (IsAuthenticated,)\n\n def setting(self, request, allow_settings):\n if request.method == \'GET\':\n # list all setting items\n return Response(data=get_settings(allow_settings))\n else:\n # change all allow setting items in allow_settings\n for key in request.data:\n if key in allow_settings and key in getattr(settings, \'CONSTANCE_CONFIG\', {}):\n value = request.data[key]\n setattr(config, key, \'\' if value is None else value)\n return Response(data=get_settings(allow_settings))\n\n def create(self, request):\n """\n <p>update with POST:<code>{\'Key\': new_value}</code>\n """\n allow_settings = [key for key, options in getattr(settings, \'CONSTANCE_CONFIG\', {}).items()]\n return self.setting(request, allow_settings)\n\n def list(self, request):\n """\n get all setting item\n """\n allow_settings = [key for key, options in getattr(settings, \'CONSTANCE_CONFIG\', {}).items()]\n return self.setting(request, allow_settings)\nRun Code Online (Sandbox Code Playgroud)\n\n在 utils.py 中:
\n\ndef get_settings(allow_settings):\n setting_list = []\n for key, options in getattr(settings, \'CONSTANCE_CONFIG\', {}).items():\n if key in allow_settings:\n default, help_text = options[0], options[1]\n data = {\'key\': key,\n \'default\': default,\n \'help_text\': help_text,\n \'value\': getattr(config, key)}\n setting_list.append(data)\n return setting_list\nRun Code Online (Sandbox Code Playgroud)\n\n在 urls.py 中:
\n\nrouter.register(r\'setting\', SettingViewSet, base_name=\'setting\')\nRun Code Online (Sandbox Code Playgroud)\n\n询问得到http://x.x.x.x/setting/你可以获得:
[\n {\n "key": "staff_prefix",\n "default": "",\n "help_text": "\xe5\xb7\xa5\xe5\x8f\xb7\xe5\x9b\xba\xe5\xae\x9a\xe4\xbb\xa3\xe7\xa0\x81",\n "value": ""\n },\n {\n "key": "staff_suffix",\n "default": 3,\n "help_text": "\xe5\xb7\xa5\xe5\x8f\xb7\xe5\xb0\xbe\xe7\xbc\x80",\n "value": "3"\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n\n发布http://x.x.x.x/setting/数据,{\'staff_prefix\': \'demo\'}您可以更新其中的值staff_prefix。