【问题标题】:Adding autogenerated value to the database in Flask with pymongo使用 pymongo 将自动生成的值添加到 Flask 中的数据库
【发布时间】:2021-01-12 16:39:42
【问题描述】:

我有一个将姓名和电子邮件插入到 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_keyaccess_key 应该是自动生成的。我在数据库集合中的预期条目如下。

_id:5f6f548d3cfa158e2ec35f42
name:"name"
email:"user@email.com"
secret_key: "b0f4f2ad-0009-11eb-8ac8-107d1a262dee"
access_key: "9LYZ8UYokGA"

如何在我的代码中实现这一点?谢谢

【问题讨论】:

    标签: python-3.x flask pymongo flask-wtforms flask-admin


    【解决方案1】:

    覆盖视图的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)
    

    【讨论】:

    • 我在 UserView 中添加了代码。但得到以下错误。 AttributeError: 'dict' 对象没有属性 'secret_key'
    • 我怀疑您需要在 UserForm 中添加 secret_keyaccess_key 作为字段(隐藏字段可能有效)。或者,使用 PyMongo 使用新的属性和值更新模型。
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多