Flask AppBuilder Base Views

來源:互聯網
上載者:User

標籤:from   index   路由   git   外觀   templates   something   javascrip   程式   

Base Views

所有視圖都從這個類繼承。它的建構函式將在Flask註冊您的url作為一個藍圖,以及所有需要定義和保護的安全許可權。

您可以使用這種視圖來實現您自己的自訂頁面,將其附加到菜單上,或者將其連結到您的網站。

使用 @expose來修飾您的url路由方法。另外,添加@hasaccess修飾器來告訴燒瓶,這是一個安全保護的方法。

使用Flask-AppBuilder-Skeleton。編輯檢視。py檔案並添加:

from flask_appbuilder import AppBuilder, expose, BaseViewfrom app import appbuilderclass 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 param1appbuilder.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_accessfrom app import appbuilderclass 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 param1appbuilder.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_accessdef 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, StringFieldfrom wtforms.validators import DataRequiredfrom flask_appbuilder.fieldwidgets import BS3TextFieldWidgetfrom flask_appbuilder.forms import DynamicFormclass 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 SimpleFormViewfrom 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上找到這個例子。

Flask AppBuilder Base Views

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.