如何在自定义 EVE 路由中编写模型

How to write model in custom EVE route

我正在对 EVE 进行一些试验,现在面临如何在自定义创建的端点中操作数据的问题。 示例:我需要一个 POST "user" 方法,我可以在其中截取数据、散列密码然后保存新用户。

为此,我想覆盖或扩展现有的 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 方法也不起作用。

您需要为此使用事件挂钩,更具体地说,on_insert_users_hook您可以在其中修改项目,然后再将其插入数据库。请参阅此处的文档和示例 (https://docs.python-eve.org/en/stable/features.html#insert-events)。

感谢 gcws 提示,这是我在 flask_bcrypt:

中针对 POST 用户请求的结果代码
...
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