首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flask错误: AttributeError:'NoneType‘对象没有'get’属性

Flask错误: AttributeError:'NoneType‘对象没有'get’属性
EN

Stack Overflow用户
提问于 2019-03-24 03:48:19
回答 2查看 6.9K关注 0票数 2

我正在使用Flask开发restful API。我正在编写pytest用例来测试/api/users路径。在测试过程中,我遇到了以下错误。我正在使用SQL炼金术。我对Flask比较陌生。我们将非常感谢您的帮助。

Flask接口:

代码语言:javascript
运行
复制
@app.route('/api/users', methods=['POST'])
def new_user():
    username = request.json.get('username')
    password = request.json.get('password')
    user = User(username = username)
    user.hash_password(password)
    db.session.add(user)
    db.session.commit()
    return ("user")

Pytest用例:

代码语言:javascript
运行
复制
@pytest.fixture
def client():
    db_fd, app.config['DATABASE'] = tempfile.mkstemp()
    app.config['TESTING'] = True
    client = app.test_client()

    yield client

    os.close(db_fd)
    os.unlink(app.config['DATABASE'])

@pytest.fixture
def user():
    return {
    'username': 'test_username',
    'password': 'test_password',
    'email': 'test_email'
    }



def _new_user(client, user):
    return client.post('/api/users', json.dumps(user))


# REGISTER USER
def test_new_user(client, user):
    res = _new_user(client, user)

    assert res.status_code == 201
    assert 'user' in json.loads(res.get_data())

当我运行测试用例时,我得到下面的错误

代码语言:javascript
运行
复制
    @app.route('/api/users', methods=['POST'])
    def new_user():
>       username = request.json.get('username')
E       AttributeError: 'NoneType' object has no attribute 'get'

apa/routes.py:20: AttributeError
EN

回答 2

Stack Overflow用户

发布于 2019-03-24 03:53:43

我认为你应该使用request.get_json()方法。

有关更多详细信息,请参阅此

票数 2
EN

Stack Overflow用户

发布于 2019-03-24 06:45:53

问题是你如何发布json。您需要修改此行:

代码语言:javascript
运行
复制
def _new_user(client, user):
    return client.post('/api/users', json.dumps(user))

目标为:

代码语言:javascript
运行
复制
def _new_user(client, user):
    return client.post('/api/users', json=json.dumps(user))

如果不将json指定为参数,它将被放入request.data属性而不是request.json.

通常,如果您试图从json获取发布到API的密钥,最好将其包装在try/中,因为如果密钥不存在或没有发布任何json,您将得到一个server500错误。对于web,即使post格式错误,也希望能够向客户端返回响应,这有助于处理更复杂的API和调试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55317712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档