Flask AppBuilder Base Views

Base Views

所有视图都从这个类继承。它的构造函数将在Flask注册您的url作为一个蓝图,以及所有需要定义和保护的安全权限。

您可以使用这种视图来实现您自己的自定义页面,将其附加到菜单上,或者将其链接到您的站点。

使用 @expose来修饰您的url路由方法。另外,添加@hasaccess修饰器来告诉烧瓶,这是一个安全保护的方法。

使用Flask-AppBuilder-Skeleton。编辑视图。py文件并添加:

from flask_appbuilder import AppBuilder, expose, BaseView
from app import appbuilder

class MyView(BaseView):
    route_base = "/myview"

    @expose(‘/method1/<string:param1>‘)
    def method1(self, param1):
        # do something with param1
        # and return it
        return param1

    @expose(‘/method2/<string:param1>‘)
    def method2(self, param1):
        # do something with param1
        # and render it
        param1 = ‘Hello %s‘ % (param1)
        return param1

appbuilder.add_view_no_menu(MyView())

这个简单的示例将用两个路由url来注册您的视图:

/myview/method1/<string:param1>
/myview/method2/<string:param1>

不会为此创建菜单,也不会创建安全权限。如果您想为您的方法启用详细的安全访问,请使用@hasaccess修饰器。现在运行这个例子

$ fabmanager run

您可以使用以下url来测试您的方法

http://localhost:8080/myview/method1/john

http://localhost:8080/myview/method2/john

正如您所看到的,这些方法是公开的。所以让我们保护他们。改变views.py,

from flask_appbuilder import AppBuilder, BaseView, expose, has_access
from app import appbuilder

class MyView(BaseView):

    default_view = ‘method1‘

    @expose(‘/method1/‘)
    @has_access
    def method1(self):
        # do something with param1
        # and return to previous page or index
        return ‘Hello‘

    @expose(‘/method2/<string:param1>‘)
    @has_access
    def method2(self, param1):
        # do something with param1
        # and render template with param
        param1 = ‘Goodbye %s‘ % (param1)
        return param1

appbuilder.add_view(MyView, "Method1", category=‘My View‘)
appbuilder.add_link("Method2", href=‘/myview/method2/john‘, category=‘My View‘)

请注意,这些方法将使简单的页面与FAB的外观和感觉无法整合。将应用程序的外观和感觉集成到应用程序的响应中很容易,因此您必须创建自己的模板。在您的项目目录和应用程序文件夹下创建一个名为“templates”的文件夹。里面创建一个文件名‘method3.html‘

{ % extends  “appbuilder / base.html”  %}
{ % block  content  %}
    < h1 > {{ param1 }} </ h1 >
{ % endblock  %}

MyView类上添加以下方法:

from flask import render_template

@expose(‘/method3/<string:param1>‘)
@has_access
def method3(self, param1):
    # do something with param1
    # and render template with param
    param1 = ‘Goodbye %s‘ % (param1)
    self.update_redirect()
    return self.render_template(‘method3.html‘,param1 = param1)

创建一个菜单链接到您的新方法:

appbuilder.add_link("Method3", href=‘/myview/method3/john‘, category=‘My View‘)

你可以看到你只需要在你的模板上扩展“appbuilder / base.html”,然后覆盖块内容。你有许多其他的可以覆盖或扩展诸如css include,javascript,headers,tail等等的东西...接下来使用Flaskrender_template来渲染你的新模板。

注意

更新重定向,在版本0.10.3,重定向算法被审查,并使用会话cookie保存5个导航历史记录。这对于重定向回来,保持url参数和改进UI体验非常有用。您必须调用self.update_redirect()将当前url插入导航历史记录。有时您可能希望跳过更新,例如表单验证错误,以便在验证错误之前,后台操作不会将您发送到同一个表单。
注意

自1.3.0版以来,您必须渲染所有的视图模板,如self.render_template,这是因为base_template(可以被覆盖)和appbuilder现在总是传递给模板。

子类SimpleFormView或PublicFormView为您的自定义窗体视图提供基础处理。

通常,您将需要这种视图来呈现不是基于数据库模型的表单,因为当它们执行时,FAB可以自动生成它们,并且可以向其添加或删除字段以及自定义验证器。为此,您可以使用ModelView。

from wtforms import Form, StringField
from wtforms.validators import DataRequired
from flask_appbuilder.fieldwidgets import BS3TextFieldWidget
from flask_appbuilder.forms import DynamicForm

class MyForm(DynamicForm):
    field1 = StringField((‘Field1‘),
        description=(‘Your field number one!‘),
        validators = [DataRequired()], widget=BS3TextFieldWidget())
    field2 = StringField((‘Field2‘),
        description=(‘Your field number two!‘), widget=BS3TextFieldWidget())

现在定义您的表单视图来公开url,创建一个菜单条目,创建安全访问,定义pre和post处理。

实现formget和formpost来实现表单的预处理和后处理。您可以使用formget来预先填入表单,并在应用程序中预先处理某些内容,然后使用formpost在用户提交后将表单提交给表单,您可以将数据保存到数据库、发送电子邮件或其他需要的操作。

from flask_appbuilder import SimpleFormView
from flask_babel import lazy_gettext as _

class MyFormView(SimpleFormView):
    form = MyForm
    form_title = ‘This is my first form view‘
    message = ‘My form submitted‘

    def form_get(self, form):
        form.field1.data = ‘This was prefilled‘

    def form_post(self, form):
        # post process form
        flash(self.message, ‘info‘)

appbuilder.add_view(MyFormView, "My form View", icon="fa-group", label=_(‘My form View‘),
                     category="My Forms", category_icon="fa-cogs")

请注意,此类派生自BaseView,因此可以覆盖父类的所有属性。还要注意标签如何使用babel的lazy_gettext作为_(‘text‘)功能,以便您的菜单项可以翻译。

你可以在SimpleForm上找到这个例子。

时间: 2024-11-13 08:14:42

Flask AppBuilder Base Views的相关文章

Flask AppBuilder Model Views

基本框架应用程序 <your project name>/ config.py :所有 的 应用程序的配置 __init__.py :应用程序的初始化 models.py :声明 你的 数据库 模型 在这里 views.py :实现你的视图 从盒子中创建应用程序是非常简单和快速的,并且有详细的安全性. 请看github的例子 简单的联系人应用 我们来创建一个很简单的联系人应用程序 FAB使用优秀的SQLAlchemy ORM包及其Flask扩展.您应该熟悉其声明性语法以在FAB上定义数据库模型

Flask AppBuilder安装

安装 安装很简单,使用普通的python软件包安装.我建议您另外安装基础骨架应用程序,以便您可以立即运行应用程序(没有任何型号)和易于增长的样板. 简单安装 您可以通过以下方式安装框架: $ pip install flask-appbuilder 建议虚拟环境安装 虚拟环境是非常可取的,因为您拥有的项目越多,您将越有可能使用不同版本的Python本身,或至少不同版本的Python库.让我们面对这一点:图书馆通常往往兼容兼容,而且任何严重的应用程序都不可能有零依赖关系.那么如果两个或更多的项目有

Django中CBV(Class Base Views)模型源码分析

在view文件中编写一个类,并配置好路由 class Test(View): def get(self, request, *args, **kwargs): return HttpResponse('cbv_get') def post(self, request, *args, **kwargs): return HttpResponse('cbv_post') url(r'test/',views.Test.as_view()), 通过as_view()进入查看源码 实际上views.Te

Python Flask高级编程之从0到1开发《鱼书》精品项目 学习 教程??

Python Flask高级编程之从0到1开发<鱼书>精品项目 学习教程 一 .安装环境我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数据迁移. $ pip install flask $ pip install SQLAlchemy==0.7.9 $ pip install flask-sqlalchemy $ pip install flask-migrate$ pip install sqlalchemy-migrate 二.建立项目

flask 使用 SQLAlchemy 的两种方式

1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.py from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db =

flask之视图

flask的CBV模式 def auth(func): def inner(*args, **kwargs): result = func(*args, **kwargs) return result return inner class IndexView(views.MethodView): # methods = ['POST'] #只允许POST请求访问 decorators = [auth,] #如果想给所有的get,post请求加装饰器,就可以这样来写,也可以单个指定 def get

Flask开发系列之初体验

Flask开发初探 介绍 在日常开发中,如果需要开发一个小型应用或者Web接口,一般我是极力推崇Flask的,主要是因为其简洁.扩展性高. 从这篇文章开始,我会写一个关于Flask的系列文章,通过多个实例,由浅入深,融入自己使用Flask的心得,希望能帮助更多朋友学习Flask. 在此之前,建议你了解常见理论(包括视图.模板等),阅读Flask的官方文档,了解sqlalchemy,有一定的前端基础. 开发环境:ubuntu + Python2.7X + mysql 本系列文章代码将持续更新于my

Flask的插件session、SQLAlchemy、Script、Migrate

一.flask-session 1.为什么要使用flask-session 因为flask默认的session是通过请求上下文放入到Local中的,是存在内存的,而使用flask-session可以更改session存放的位置,可以存放在redis.memcached.filesystem.mongodb.sqlalchemy等数据库中,flask-session也是基于flask原本的session原理实现的,只是让session存放的位置更改了而已. 2.使用步骤 1. 下载 pip ins

flask请求上下文 (转)

本篇阅读目录 一.flask中的CBV 二.werkzeug + 上下文初步解读 三.偏函数和线程安全 回到顶部 一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV怎么实现? from flask import Flask, render_template, url_for, views app = Flask(__name__) class Login(views.MethodView): def get(self): print(url_for("my_l