mas*_*cai 5 authentication django django-models django-rest-framework
我有一个自定义用户模型类
\nfrom django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager\n\nclass CustomUser(AbstractBaseUser, PermissionsMixin)\n ...\n email = models.EmailField(_('email address'), unique=True)\n user_name = models.CharField(max_length=150, unique=True) # Full name\n phone_number = models.CharField(max_length=20, unique=True)\nRun Code Online (Sandbox Code Playgroud)\n及相关视图
\nclass CustomUserViewSet(viewsets.ModelViewSet):\n pagination_class = BasePagination\n queryset = CustomUser.objects.all()\n ...\n\n def create(self, request, *args, **kwargs):\n serializer = CustomUserSerializer(data=request.data)\n\n if serializer.is_valid():\n user = serializer.save()\n if user:\n json = serializer.data\n send_invitation_email(\n user=user,\n email=json["email"],\n password=request.data["password"],\n phone=json["phone_number"]\n )\n create_chats(user)\n return Response(json, status=status.HTTP_201_CREATED)\n return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)\nRun Code Online (Sandbox Code Playgroud)\n如果电子邮件、用户名重复,我会收到以下错误消息:
\n\n\n{"user_name":["自定义用户 \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc 用户名 \xd1\x83\xd0\xb6\xd0\xb5 \xd1\ x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82。"]}
\n
如何使用我的自定义消息覆盖此消息的错误:
\n\n\n{"用户名":["\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbb\xd1\ x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc \xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbc \ xd1\x83\xd0\xb6\xd0\xb5\xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\ x82。”]}
\n
更新\n我更新了我的序列化器
\nclass CustomUserSerializer(serializers.ModelSerializer):\n avatar = serializers.FileField(use_url=False, required=False)\n organization = OrganizationSimpleSerializer(required=False, read_only=True)\n user_type = DepartmentSerializer(required=False, read_only=True)\n\n organization_id = serializers.IntegerField(required=True, write_only=True)\n user_type_id = serializers.IntegerField(required=True, write_only=True)\n\n class Meta:\n model = CustomUser\n fields = [\n ...\n ]\n read_only_fields = ("id",)\n extra_kwargs = {}\n extra_kwargs = {\n "password": {"write_only": True},\n "user_name": {\n "error_messages": {"unique": "\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc \xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbc \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82."}\n },\n "email": {\n "error_messages": {"unique": "\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xbe\xd0\xb9 \xd1\x8d\xd0\xbb\xd0\xb5\xd0\xba\xd1\x82\xd1\x80\xd0\xbe\xd0\xbd\xd0\xbd\xd0\xbe\xd0\xb9 \xd0\xbf\xd0\xbe\xd1\x87\xd1\x82\xd0\xbe\xd0\xb9 \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82"}\n },\n "phone_number": {\n "error_messages": {"unique": "\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc \xd1\x82\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82"}\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n但我没有看到错误消息,我看到的是:
\n{"user_name":["\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc user name \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82."],"phone_number":["\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc phone number \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82."]}\nRun Code Online (Sandbox Code Playgroud)\n看起来检查序列化器级别不起作用
\n小智 3
您可以像这样在序列化器中的验证器中添加消息
\n所以CustomUserSerializer输入这段代码:
def validate_username(self,value):\n if your_logic:\n return value\n raise serializers.ValidationError(\'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc \xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbc \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82.\')\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1461 次 |
| 最近记录: |