如何在自定义 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
我正在对 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