我正在尝试一些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方法也不起作用。
答案 0 :(得分:1)
为此,您需要使用事件钩子,更具体地说,是on_insert_users_hook
,可在插入数据库之前对其进行修改。请参阅此处的文档和示例(https://docs.python-eve.org/en/stable/features.html#insert-events)。
答案 1 :(得分:0)
感谢gcws提示,这是我在EVE中使用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