Ошибка колбы: AttributeError: у объекта 'NoneType' нет атрибута 'get' - PullRequest
0 голосов
/ 23 марта 2019

Я использую Flask для разработки restful API.Я пишу кейсы для тестирования пути / api / users.Во время тестирования я получаю ошибку ниже.Я использую Алхимию SQL.Я относительно новичок в Flask.Любая помощь будет высоко ценится

Flask API:

@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 case:

@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())

Когда я запускаю тестовый пример, я получаю ошибку ниже

    @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

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Проблема в том, как вы публикуете JSON.Вам нужно изменить эту строку:

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

на:

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

Если вы не укажете json в качестве аргумента, он будет вставлен в атрибут request.data вместоrequest.json.

В общем случае, если вы пытаетесь получить ключи от json, опубликованные в API, рекомендуется заключить в попытку / за исключением того, что вы получите ошибку 500 сервера, если ключне существует или нет JSON был опубликован.При использовании веб-API желательно иметь возможность возвращать ответ клиенту, даже если сообщение было искажено, что помогает при более сложных API-интерфейсах и отладке.

0 голосов
/ 23 марта 2019

Я думаю, что вы должны использовать метод request.get_json ().

Подробнее см. request.get_json

...