【发布时间】:2021-10-28 01:46:16
【问题描述】:
我一直在尝试创建一个 drf 应用,并希望实现一个可以做两件事的登录视图:
- 自动设置 cookie
- 返回用户的url和用户名
问题出在序列化程序代码中的 validate 函数中
views.py:
class CookieTokenObtainPairView(TokenObtainPairView):
def finalize_response(self, request, response, *args, **kwargs):
if response.data.get("refresh"):
# the cookie part works well
# the part that doesn't is in the serializer below
user = UserLoginSerializer(data=request.data)
user = user.validate(data=request.data) if user.is_valid()
response.data["user"] = user.data if user.is_valid() else user.errors
return super().finalize_response(request, response, *args, **kwargs)
序列化器.py
class UserLoginSerializer(serializers.HyperlinkedModelSerializer):
password = serializers.CharField(style={"input type": "password"}, write_only=True)
#
class Meta:
model = User
fields = (
"id",
"url",
"username",
"password",
)
# read_only_fields = ("id")
def validate(self, data):
data["username"] = self["username"]
data["password"] = self["url"]
return super().validate(data)
如您所见,验证选项正在尝试获取用户名和 url 数据以返回它,但它正在尝试创建一个新帐户。所以也许验证选项不正确。我研究了 drf 文档,但似乎有一个完全不同的函数,称为 create。所以我不知道 validate 是如何不起作用的。也许我应该输入另一个函数
【问题讨论】:
标签: python django serialization django-rest-framework django-serializer