问题描述
我有一个代码,可将名称和电子邮件插入pymongo数据库。这是我的代码;
from flask import Flask
from flask_admin import Admin,BaseView,expose
from flask_admin.contrib.pymongo import ModelView
from wtforms import Form
from pymongo import MongoClient
from wtforms import TextField,PasswordField
from uuid import uuid1
import secrets
# Create secret_key -> secret_key = str(uuid1())
# Create access_key -> access_key = secrets.token_urlsafe(8)
client = MongoClient()
db = client['AdminDB']
class UserForm(Form):
name = TextField('Name')
email = TextField('Email')
class UserView(ModelView):
column_list = ('name','email')
form = UserForm
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretKey'
admin = Admin(app,name='My App Admin')
admin.add_view(UserView(db['users']))
if __name__ == "__main__":
app.run(debug=True)
我希望 secret_key 和 access_key 本质上应该自动生成。我在数据库集合中的预期条目如下。
_id:5f6f548d3cfa158e2ec35f42
name:"name"
email:"user@email.com"
secret_key: "b0f4f2ad-0009-11eb-8ac8-107d1a262dee"
access_key: "9LYZ8UYokGA"
如何在代码中实现?谢谢
解决方法
覆盖视图的on_model_change
。例如,要在新创建模型时设置值:
class UserView(ModelView)
def on_model_change(form,model,is_created):
if is_created:
model.secret_key = str(uuid1())
model.access_key = secrets.token_urlsafe(8)