- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然我知道如何解决,但我正在尝试理解为什么会出现此错误。只是想更好地理解 DRF 和 Django。
这种格式的JSON来自FE:
{
"username": "username_here",
"password": "password_here"
}
我的看法是:
class UserSigninTokenAPIView(APIView):
permission_classes = [AllowAny]
serializer_class = UserSigninTokenSerializer
def post(self, request):
data = request.data
serializer = UserSigninTokenSerializer(data=data)
if serializer.is_valid(raise_exception=True):
new_data = serializer.data
return Response(new_data, status=HTTP_200_OK)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
它使用这个序列化器:
class UserSigninTokenSerializer(ModelSerializer):
username = CharField()
class Meta:
model = USERS
fields = [
'username',
'password',
'id'
]
def validate(self, data):
username = data['username']
password = data['password']
user_qs = USERS.objects.filter(username__iexact=username)
if user_qs.exists() and user_qs.count() == 1:
user_obj = user_qs.first()
password_passes = user_obj.check_password(password)
if password_passes:
"""
A number of checks here I removed to keep this clean,
otherwise would just use /api/token/ to get a token.
I want user checks to pass before issuing a token,
because having the token is what indicates they are
logged in successfully.
"""
token = RefreshToken.for_user(user_obj)
return {
'refresh': str(token),
'access': str(token.access_token)
}
else:
Services.user_attempts(user_obj)
raise ValidationError({'error': '''
The credentials provided are invalid.
<br>Please verify the username and password are correct.
'''})
username = CharField()
对我来说似乎是多余的。 documentation说:
The
ModelSerializer
class provides a shortcut that lets you automatically create aSerializer
class with fields that correspond to the Model fields.
我将其解释为仅在 class Meta:
中指定 field = []
就足以反序列化 JSON。
但是,当我删除 username = CharField()
时,我得到:
{
"username": [
"user with this username already exists."
]
}
documentation对于明确的规范说:
You can add extra fields to a
ModelSerializer
or override the default fields by declaring fields on the class, just as you would for aSerializer
class.
这听起来是可选的,但显然必须指定它。
如果有人不介意解释,我在这里错过了什么?
最佳答案
您正在对您的模型使用 ModelSerializer
并且请求是 POST
,难怪您为什么会得到这个。
ModelSerializer
用于为 CRUD 操作提供快速的标准序列化,因此当您的请求是 POST
时,您的序列化程序将假定您正在使用该请求创建一个新用户Users 模型的数据,因此将应用创建验证,并且由于用户名是唯一的...,剩下的就是故事了。
尝试使用基本的序列化器,因为你只想读取数据,这样会更简单
关于django - 如果未明确指定,则为 DRF ModelSerializer 中的 "user with this username already exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60533893/
我在 SQL 查询中使用了一个简单的 IF NOT EXISTS/WHERE NOT EXISTS 语句(我都尝试过),但我总是收到 mysql 错误,不知道为什么。尝试使用不同的引号,检查我的 My
我有 2 个表:tbl1 和 tbl2。我想从 tbl1 返回一行,其中包含以下列:col1、col2、col3、can_be_deleted 、有重要项目。这个想法是,can_be_deleted
如果您是 "t1".persona_1_id = 2,则预期结果应返回 persona_id = 4。 like --- id persona_1_id persona_2_id liked 1 2
我遇到了这个用于执行幂等插入的 github SQL 代码示例。完全按照我想要的方式工作。我不想使用 EXISTS,因为我觉得它有点困惑。可以使用联接对相同的操作进行编码吗? 下面是我在 github
public bool CheckTblExist(string TblName) { try { string cmTxt = "s
表1 Id Name DemoID 1 a 33 2 b 44 3 c 33 4 d 33 5 e 44 表2 Id DemoID IsT
我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别: 语句 1:(存在) IF EXISTS( SELECT OR
我正在更新 exist-db 集合中的 XML 文件,我必须检查是否存在 id 以决定是否必须在我的文档中替换或插入某些内容。 我注意到随着文件的增长,查询执行时间显着恶化,我决定为我的文件添加一个索
我有一个正在尝试更新的数据库,但我不明白为什么会收到有关不存在的列的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了couple其他questions遇到类
我有一个这样的查询 SELECT ... FROM ... WHERE (SELECT EXISTS (SELECT...)) which did not return anything th
我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。这是我得到的示例数据: $uname = $get['userName']; $oname = $get['offerNa
我的批处理文件中有这个脚本 -- if not exist "%JAVA_HOME%" ( echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) -
有没有办法让 Directory.Exists/File.Existssince 区分大小写 Directory.Exists(folderPath) 和 Directory.Exists(folde
考虑使用这两个表和以下查询: SELECT Product. * FROM Product WHERE EXISTS ( SELECT * FROM Codes
我正在使用 Subclipse 1.6.18 使用 Eclipse 3.72 (Indigo) 来处理 SVN 1.6 存储库。这一切都在 Ubuntu 下运行。 我有一个项目,在我更新我的 Ecli
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
我有兴趣为需要使用 NOT EXISTS 的应用程序编写查询。子句来检查一行是否存在。 我正在使用 Sybase,但我想知道一般 SQL 中是否有一个示例,您可以在其中编写具有 NOT EXISTS
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
下面是代码示例: CREATE TABLE #titles( title_id varchar(20), title varchar(80)
我曾经这样编写 EXISTS 检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET
我是一名优秀的程序员,十分优秀!