標籤: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