Как написать модель по индивидуальному маршруту EVE - PullRequest
1 голос
/ 06 мая 2019

Я немного экспериментирую с EVE и теперь сталкиваюсь с вопросом о том, как манипулировать данными в пользовательских конечных точках.Пример: мне нужен метод POST «пользователь», где я могу перехватить данные, хэшировать пароль и затем сохранить нового пользователя.

Для этой цели я бы хотел перезаписать или расширить существующий метод POST.Моя попытка:

@app.route('/users', methods=['POST'])
def create_user():
    user = app.data.driver.db['user']
    print(request.json)
    username = request.json.get('username')
    password = request.json.get('password')
    if username is None or password is None:
        abort(400)  # arguments are missing
    if user.find({ 'username': username}) is not None:
        abort(400)  # user is existing
    => hash password
    => save user with hashed password

К сожалению, перезапись метода POST, созданного моей моделью пользователя, также не работает.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Для этого вам нужно использовать обработчик событий, более конкретно, on_insert_users_hook, где вы можете изменить элемент перед вставкой в ​​базу данных.См. Документацию и пример здесь (https://docs.python -eve.org / ru / stable / features.html # insert-events ).

0 голосов
/ 08 мая 2019

Благодаря подсказке gcws, вот мой результирующий код для запроса пользователя POST в EVE с flask_bcrypt:

...
from flask import request    
from flask_bcrypt import Bcrypt

...

bcrypt = Bcrypt()


def pre_user_post_callback(request):
    print('A POST on "user" was just performed!')

    pw_hash = bcrypt.generate_password_hash(request.json["password"], 12)
    del request.json["password"]
    request.json["password_hash"] = pw_hash.decode()

    print(bcrypt.check_password_hash(request.json["password_hash"] , '12345')) #  True if requested pw is 12345



app.on_pre_POST_user += pre_user_post_callback
...