如何使用flask-admin的编辑页面中的generate_password_hash设置password_hash
如何从flask-admin编辑密码,密码应保存为散列类型
我的代码是:
from werkzeug.security import generate_password_hash, check_password_hash
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120))
password_hash = db.Column(db.String(64))
username = db.Column(db.String(64), unique=True, index=True)
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
def __repr__(self):
return '<User %r>' % self.username
#Create custom models view
class MyModelView(sqla.ModelView):
@admin.expose('/login/')
def index(self):
return self.render('login.html')
# Create custom admin view
class MyAdminView(admin.BaseView):
@admin.expose('/')
def index(self):
return self.render('myadmin.html')
admin = admin.Admin(name="Simple Views")
admin.add_view(MyAdminView(name='hello'))
admin.add_view(MyModelView(User, db.session))
admin.init_app(app)
app.run()
Run Code Online (Sandbox Code Playgroud) 我的代码:
__init__.py
from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from user.user import mod as user
from user.models import User as userModel
app.register_blueprint(user, url_prefix='/user')
admin = Admin(app, name='My app')
admin.add_view(ModelView(userModel, db.session, name='userAdmin'))
Run Code Online (Sandbox Code Playgroud)
user.py:
from flask import Blueprint, json
from flask.views import MethodView
mod = Blueprint('user', __name__)
class UserAPI(MethodView):
def get(self):
users = [
{'nickname': 'Chan'},
{'nickname': 'Hzz'},
]
return json.dumps(users)
mod.add_url_rule('/users/', view_func=UserAPI.as_view('users'))
Run Code Online (Sandbox Code Playgroud)
models.py:
from app …Run Code Online (Sandbox Code Playgroud) 嗨,Flask 开发人员!
在 Flask-admin 中,我目前尝试在我的模型视图中实现内联模型编辑。在模型方面,我有一个表示一组内容页面的简单树结构。每个节点都有几个子节点以及与之关联的几个内容数据模型。这些模型被命名为ContentNode和ContentData。
如果我inline_models按照此处的文档中所述在节点视图类上使用该属性,它起初似乎工作正常。
# AuthModelView is simply ModelView with user authentification
class ContentNodeModelView(AuthModelView):
...
inline_models = (models.ContentData, )
Run Code Online (Sandbox Code Playgroud)
但是,一旦我尝试将属性传递给内联表单,使用
inline_models = [(models.ContentData, dict(form_columns=['title', 'text']))]
Run Code Online (Sandbox Code Playgroud)
Flask 服务器给出
AttributeError: 'ContentDataForm' object has no attribute 'id'
Run Code Online (Sandbox Code Playgroud)
我在这里错过了一些非常明显的东西吗?文档中是否可能有错误,因为听起来可能inline_models需要一个模型但得到一个字典?
我肯定检查过它与文档中的相同。
任何帮助是极大的赞赏。谢谢 :)
我知道使用form_extra_fields可以在flask-admin中添加一个额外的字段.但是我怎么能让它"需要"?提前致谢.
form_extra_fields = {
'password2': PasswordField('Password')
}
Run Code Online (Sandbox Code Playgroud) 关于烧瓶管理员的问题.我设置了flask-admin,我创建的其中一个模型是从mysql数据库中提取url和url标题.使用flask-admin,如何让flask-admin呈现网址而不仅仅是文本?因此,用户只需点击flask-admin应用程序中的链接即可.谢谢.
我在flask-admin网站上找到了一些名为column formatters的东西,但不知道如何实现.有没有人有他们可以分享的例子?谢谢.
在 Flask Admin 中,我有一列字符串值(我无法更改数据库定义)。在索引视图中过滤此列时,用户应该能够从下拉列表中选择值。
当用户选择过滤器时,应该计算过滤器的可能选项。所以我需要一种方法来设置基于自定义模型查询的选项。由于该列已编入索引,因此查询速度相当快。
该SQLA自定义过滤器例子只说明了如何应用自定义过滤器,但不知道如何做一个过滤器动态的选择。
假设我有一个用户模型,例如:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(255))
last_name = db.Column(db.String(255))
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
registered_on = db.Column(db.DateTime, nullable=True)
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
和管理员视图:
class UserView(MyModelView):
form_columns = (
'roles',
'first_name',
'last_name',
'email',
'password',
'registered_on',
)
form_args = dict(
registered_on=dict(default=datetime.now())
)
Run Code Online (Sandbox Code Playgroud)
当我创建一个新用户时,如何使用 bcrypt 之类的东西自动生成密码哈希?
我正在开发简单的 Web 应用程序,至于数据库显示,我使用Flask_admin模块。我想将自定义 CSS 应用于我所有的模板,例如带有蓝色边框的自定义导航。这是我的 index.html 模板的样子:
{% block head %}
{{ super() }}
.navbar {
border-color: #019ced;
border-width: 1px;
border-radius: 0;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
border-top: none;
box-shadow: none;
}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我想将此自定义导航栏样式应用于所有模板。
我试图使用 master.html 来做到这一点
{% extends 'admin/base.html' %}
{% block head_css %}
{{ super() }}
.navbar {
border-color: #019ced;
border-width: 1px;
border-radius: 0;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
border-top: none;
box-shadow: none;
}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
然后在index.html 中从它扩展没有任何成功。我想我可以为从父级继承的每个视图定义自定义模板并覆盖 head 部分,我在其中包含带有自定义导航栏的 CSS …
我正在尝试在我的管理页面中的某个 ModelView 上加载脚本:
class CustomView(ModelView):
# Neither approach works here:
# with current_app.app_context(), current_app.test_request_context():
extra_js = [url_for('static', filename='admin/admin.js')]
Run Code Online (Sandbox Code Playgroud)
随着app_context()注释掉,我得到这个错误:
运行时错误:尝试在没有推送应用程序上下文的情况下生成 URL。这必须在应用程序上下文可用时执行。
取消注释 app_context 会给我这个错误:
运行时错误:在应用程序上下文之外工作。这通常意味着您尝试使用需要以某种方式与当前应用程序对象交互的功能。要解决此问题,请使用 app.app_context() 设置应用程序上下文。有关更多信息,请参阅文档。
我还尝试在设置管理视图时添加上下文,但得到相同的错误:
# ADMIN
with app.app_context():
admin = Admin(app, name='Custom', template_mode='bootstrap3', index_view=MyIndex(), base_template='admin/base.html')
admin.add_view(CustomView(User, db.session))
Run Code Online (Sandbox Code Playgroud)
那么,我如何适当地传递应用程序上下文来加载我的这个视图的脚本?
我有两个表:“产品”、“成分”和“产品成分”
class ProductIngredient(db.Model):
__tablename__ = "product_ingredient"
id = db.Column(db.Integer(), primary_key=True)
product_id = db.Column('product_id', db.Integer, db.ForeignKey('product.id'))
ingredient_id = db.Column('ingredient_id', db.Integer, db.ForeignKey('ingredient.id'))
amount = db.Column(db.DECIMAL(10, 3))
class Ingredient(db.Model):
__tablename__ = "ingredient"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
desc = db.Column(db.Text)
class Produto(db.Model):
__tablename__ = "product"
id = db.Column(db.Integer, primary_key=True)
desc = db.Column(db.String(20))
ingredients = db.relationship('Ingredient', secondary='product_ingredient', backref=db.backref('product', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
请注意,在 ProductIngredient 类中有一个数量字段,它将获取构成每个产品的每种成分的数量
在管理员中设置字段,我收到以下错误
class ProdMV(ModelView):
column_display_pk = False
form_columns = [Product.desc, Ingredient.name, ProductIngredient.amount]
column_auto_select_related = True
column_hide_backrefs = False
admin.add_view(ProdMV(Product, db.session))
Run Code Online (Sandbox Code Playgroud)
内置异常 …