-1

我正在研究这个登录应用程序的代码。我可以看到,只有 if 语句在此代码中适用于用户名和密码的有效值。如果我输入无效的用户名和密码值,else 部分应该可以工作,但它不工作。

**main.py**

@app.post("/loginsuccess/", response_class=HTMLResponse)
async def login_success(request: Request, username: str = Form(...), password: str = Form(...)):
    p = await User_Pydantic.from_tortoise_orm(await User.get(username=username, password=password))
    json_compatible_item_data = jsonable_encoder(p)
    if json_compatible_item_data['username']==username and json_compatible_item_data['password']==password:
        
        print(json_compatible_item_data["username"], "22222222222222222")
        return templates.TemplateResponse("homepage.html", {"request": request, "username":username})
    else:
        print("NOOOOOOOOOOOOOOOOO")
        status_code:int
        status_code = 500
        return templates.TemplateResponse("index.html", {"request":request, "status_code":status_code})
    
4

2 回答 2

2

from_tortoise_orm返回一个pydantic永远不会的对象None,因为类的实例始终是非 None 对象(除非您覆盖__eq__类定义中的行为)。

p您可以尝试比较,而不是比较对象jsonable_encoder(p)

json_compatible_item_data = jsonable_encoder(p)
if json_compatible_item_data:
    print(json_compatible_item_data["username"], "22222222222222222")
    ...
else:
    print("NOOOOOOOOOOOOOOOOO")
    ...

更新(基于 OP 的评论)

你可以做

if not json_compatible_item_data.get('detail') == 'Object does not exist':
    ...
else:
    print("NOOOOOOOOOOOOOOOOO")
    ...
于 2021-05-26T05:36:56.560 回答
-1

我不是 Django 或 Flask 的专家,但我认为使用is not会使其无法使用!= None

于 2021-05-26T05:37:45.483 回答