我将Flask-Admin与Flask-Login和mongoengine结合使用.
我希望根据用户自定义视图.以下can_create是允许模型创建的示例.
class MyModelView(ModelView):
column_exclude_list = ['password']
def is_accessible(self):
if (login.current_user.login != 'admin'):
can_create=False
return login.current_user.is_authenticated()
Run Code Online (Sandbox Code Playgroud)
这样的代码没有任何效果:所有用户仍然可以创建,管理员和非管理员用户之间没有区别.
非常感谢任何关于如何仅允许给定用户创建模型的提示.
我已经检查了文档,并且如何实现is_accessible方法非常模糊.
以下是烧瓶管理员的文档显示的内容
class MicroBlogModelView(sqla.ModelView):
def is_accessible(self):
return login.current_user.is_authenticated()
def inaccessible_callback(self, name, **kwargs):
# redirect to login page if user doesn't have access
return redirect(url_for('login', next=request.url))
Run Code Online (Sandbox Code Playgroud)
我不知道的是你怎么称呼它是自动调用还是你必须像这样自己调用它:
@expose("/", methods=["GET", "POST"])
def home(self):
if self.is_accesible():
return super().index()
else:
return self.login()
def is_accesible(self):
return current_user.is_authenticated and "admin" in current_user.role
Run Code Online (Sandbox Code Playgroud)
因为放一个是非常重复的
if self.is_accesible():
return super().index()
Run Code Online (Sandbox Code Playgroud)
检查我们是否有很多管理员观点.那么我们究竟是如何实现它的呢?文档展示了如何将它放在您的模型中,而不是如何在您的视图上实现它
我正在尝试将 Flask-Admin 和某人编写的Flask S3 工具套件结合起来,将图像存储到 Amazon S3 简单存储中。我试图专门使用的工具是S3Saver功能,在文章链接中,用户继续说要合并此工具,我最好在 Flask-admin 回调上使用它。
但是,我在任何地方都找不到 Flask-Admin 回调列表。我已经完成了我的作业,并且已经逐字检查了这些回调Flask-Admin 文档的整个文档和源代码。
我发现flask_admin.contrib.sqla一些类似于回调的方法,但它不是我正在寻找的。我想它与 Railsbefore_action和after_action. 有人可以指出我正确的方向吗?
顺便说一句,这是文章的实际引用
如果您也想在管理中处理删除文件的问题,您可以(例如)使用 s3-saver,并将其挂接到 Flask-Admin 事件回调之一
这些回调是什么?
我正在为不同的公司实现一个接口,以使用相同的 Flask Admin 实例为他们的不同用户添加和分配角色。但是,我希望只有属于公司查看数据的用户才会出现在代表角色和用户之间一对多关系的下拉列表中。
是否有类似get_query, 但对于下拉值?
这是我当前的视图代码
class RoleView(ModelView):
def get_query(self):
return super(RoleView, self).get_query().filter(
Role.company_id == current_user.company.id
)
def get_count_query(self):
return super(RoleView, self).get_count_query().filter(
Role.company_id == current_user.company.id
)
Run Code Online (Sandbox Code Playgroud)
和模型
class Role(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
users = db.relationship(
'User',
backref="role",
lazy="dynamic"
)
company_id = db.Column(
db.Integer,
db.ForeignKey('company.id'),
nullable=False
)
Run Code Online (Sandbox Code Playgroud)
谢谢
假设我声明了以下模型:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
Run Code Online (Sandbox Code Playgroud)
我想创建一个视图,用户可以在其中查看 Person 对象并向其添加详细信息。我想要一个按钮来添加一个类似于以下内容的地址:
<a href='{{ url_for('address.create_view',person=get_value(model,'id'))}}' class='btn'>Add</a>
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何将 person_id 设置为发送的值?理想情况下,我想隐藏人员下拉小部件并将其转换为带有发送值的隐藏字段。但我会满足于从地址表格的人员下拉列表中选择正确的人员。
谢谢你。
我正在开发一个 Flask-Admin 项目,希望添加一个联系我们页面。我正在关注https://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982上的示例
这个问题是它是为 Flask 设计的,但我所有的模板都是基于 Flask-Admin 模板。
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form=form)
else:
msg = Message(form.subject.data, sender='contact@example.com',
recipients=['email@email.com'])
msg.body = """
From: %s <%s>
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return render_template('contact.html', success=True)
elif request.method == 'GET':
return render_template('contact.html', form=form, admin=admin)
Run Code Online (Sandbox Code Playgroud)
contact.html 扩展了两个管理模板
{% import 'admin/layout.html' as layout with context -%}
{% extends 'admin/base.html' %}
Run Code Online (Sandbox Code Playgroud)
结果抛出了一条错误消息。
jinja2.exceptions.UndefinedError:“admin_view”未定义
我知道我可以修改模板以删除扩展管理模板,但是整个网站的导航是通过 …
Flask-Admin在其标准编辑视图中显示由关系定义的子对象。例如,如果User对象有Address子对象,则查看的编辑视图User将Address在适当的字段中显示子对象。然后,用户可以删除该对象,或添加另一个对象。
我希望用户能够单击或以其他方式进入子对象的编辑视图。在我描述的示例中,用户应该能够Address直接从对象的编辑视图访问对象的编辑视图User。
我发现的唯一相关内容是inline_models,但这不是解决方案。该实现非常脆弱(例如,它不能处理长距离关系)。Flask-Admin知道子对象!我可以在视图中看到它们!我只希望他们成为他们自己的编辑视图的链接...
任何人都知道如何实现这一目标,或者可以链接到示例吗?
我想更改一些现有的使用flask_admin. 其中一种视图inline_models与(ClassName, Options)声明模式一起使用。内联类有一个文本字段。我想通过以下方式更改 flask_admin 默认行为:
我做了一些谷歌搜索,但任何看起来有潜力的东西看起来也很重要。我希望有一些合理直接的方法来实现这一目标。
您的帮助将不胜感激。
通过 Flask 中的管理面板在表中创建新行时,如何覆盖并添加一些额外的代码?
例如:用户在“发布”表中输入新行的信息,然后单击“保存”。我想添加一些代码来使用新的行信息自动执行流程。
我正在使用flask-admin 和flask-sqlalchemy 开发一个小型flask API。api 运行良好,但每当我安装新包时,我都会遇到错误。
Error: While importing 'app', an ImportError was raised:
Traceback (most recent call last):
File "/Users/brandoncreed/.local/share/virtualenvs/management-System-Wyc_ba1N/lib/python3.8/site-packages/flask/cli.py", line 218, in locate_app
__import__(module_name)
File "/Users/brandoncreed/Desktop/Brandon Coding Projects/management-System/src/app.py", line 12, in <module>
from api.admin import setup_admin
File "/Users/brandoncreed/Desktop/Brandon Coding Projects/management-System/src/api/admin.py", line 5, in <module>
from flask_admin.contrib.sqla import ModelView
File "/Users/brandoncreed/.local/share/virtualenvs/management-System-Wyc_ba1N/lib/python3.8/site-packages/flask_admin/contrib/sqla/__init__.py", line 2, in <module>
from .view import ModelView
File "/Users/brandoncreed/.local/share/virtualenvs/management-System-Wyc_ba1N/lib/python3.8/site-packages/flask_admin/contrib/sqla/view.py", line 18, in <module>
from flask_admin.contrib.sqla.tools import is_relationship
File "/Users/brandoncreed/.local/share/virtualenvs/management-System-Wyc_ba1N/lib/python3.8/site-packages/flask_admin/contrib/sqla/tools.py", line 11, in <module>
from sqlalchemy.ext.associationproxy import ASSOCIATION_PROXY
ImportError: …Run Code Online (Sandbox Code Playgroud)