欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python的Flask框架中Flask-Admin庫的簡單入門指引

 更新時間:2015年04月07日 15:23:14   投稿:goldensun  
這篇文章主要介紹了一個Python的Flask框架中Flask-Admin庫簡單入門的指引,包括介紹和簡單的部署等,需要的朋友可以參考下

 Flask-Admin是一個功能齊全、簡單易用的Flask擴展,讓你可以為Flask應(yīng)用程序增加管理界面。它受django-admin包的影響,但用這樣一種方式實現(xiàn),開發(fā)者擁有最終應(yīng)用程序的外觀、感覺和功能的全部控制權(quán)。

本文是關(guān)于Flask-Admin庫的快速入門。本文假設(shè)讀者預(yù)先具有一些Flask框架的知識。

  1.     介紹
  2.     初始化
  3.     增加視圖
  4.     身份驗證
  5.     生成URL
  6.     模型視圖
  7.     文件管理

介紹

這個庫打算做到盡可能的靈活。并且開發(fā)者不需要任何猴子補丁就可以獲得期望的功能。

這個庫使用一個簡單而強大的概念——管理部件(administrative pieces,不太好翻譯),是用視圖方法構(gòu)建的類。

例如,這是一個絕對有效的管理部件:
 

class MyView(BaseView):
  @expose('/')
  def index(self):
    return self.render('admin/myindex.html')
 
  @expose('/test/')
  def test(self):
    return self.render('admin/test.html')

如果用戶訪問index視圖,模板文件admin/myindex.html會被渲染。同樣的,訪問test視圖的結(jié)果是admin/test.html被渲染。

那么,這個方法怎樣幫助管理界面的結(jié)構(gòu)化?使用這些已建立的部件,你可以實施高度定制化的可重復(fù)使用的功能。

例如,F(xiàn)lask-Admin提供一個現(xiàn)成的SQLAlchemy模型接口。它以類執(zhí)行并接受2個參數(shù):模型類和數(shù)據(jù)庫會話。當(dāng)它顯示一些改變接口的行為的類級變量(有點像django.contrib.admin),沒有任何東西阻止你繼承它并覆蓋表單創(chuàng)建邏輯、數(shù)據(jù)庫存儲方法或者通過增加更多的視圖擴展現(xiàn)有的功能。
初始化

要開始使用Flask-Admin,你需要創(chuàng)建一個Admin類實例并和Flask應(yīng)用程序?qū)嵗P(guān)聯(lián)。
 

from flask import Flask
from flask.ext.admin import Admin
 
app = Flask(__name__)
 
admin = Admin(app)
# Add administrative views here
 
app.run()

如果你運行這個程序并訪問http://localhost:5000/admin/,你會看到一個頂部有導(dǎo)航欄的空的“Home”頁面:

201547151627357.png (630×212)

 你可以更換應(yīng)用程序名稱通過傳值給Admin類構(gòu)造函數(shù)的name參數(shù):
 

admin = Admin(app, name='My App')

作為一個選擇方案,在Admin實例初始化之后,你可以調(diào)用init_app()函數(shù)把Flask應(yīng)用程序?qū)ο髠鹘oAdmin構(gòu)造函數(shù):
 

admin = Admin(name='My App')
# Add views here
admin.init_app(app)

增加視圖

現(xiàn)在,讓我們增加一個管理視圖。下面的例子會致使兩個項目出現(xiàn)在導(dǎo)航菜單:Home和Hello。為此,你需要衍生于BaseView類:
 

from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
 
class MyView(BaseView):
  @expose('/')
  def index(self):
    return self.render('index.html')
 
app = Flask(__name__)
 
admin = Admin(app)
admin.add_view(MyView(name='Hello'))
 
app.run()

一個關(guān)于管理視圖的重要約束是每個視圖類應(yīng)該擁有一個默認的以根URL/開頭的頁面視圖方法。下面的例子是正確的:
 

class MyView(BaseView):
  @expose('/')
  def index(self):
    return self.render('index.html')

可是,這個不工作:
 

class MyView(BaseView):
  @expose('/index/')
  def index(self):
    return self.render('index.html')

現(xiàn)在,創(chuàng)建一個新的index.html文件并寫入如下內(nèi)容:
 

{% extends 'admin/master.html' %}
{% block body %}
  Hello World from MyView!
{% endblock %}

然后把它放到templates目錄。為維持一致的外觀和感覺,所有管理頁面應(yīng)該延伸于admin/master.html模板。

你現(xiàn)在應(yīng)該看到Hello頁面的新的管理頁面起作用了。
 要增加另一個級別的菜單項目,你可以指定category參數(shù)的值當(dāng)傳送管理視圖給Admin實例時。category指定頂級菜單項目的名字,并且所有與之關(guān)聯(lián)的視圖,都會通過下拉菜單進入。例如:
 

from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
 
class MyView(BaseView):
  @expose('/')
  def index(self):
    return self.render('index.html')
 
app = Flask(__name__)
 
admin = Admin(app)
admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))
app.run()

看起來是這樣的:

201547151816428.png (630×212)

 要增加另一個級別的菜單項目,你可以指定category參數(shù)的值當(dāng)傳送管理視圖給Admin實例時。category指定頂級菜單項目的名字,并且所有與之關(guān)聯(lián)的視圖,都會通過下拉菜單進入。例如:
 

from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
 
class MyView(BaseView):
  @expose('/')
  def index(self):
    return self.render('index.html')
 
app = Flask(__name__)
 
admin = Admin(app)
admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))
app.run()

看起來是這樣的:

201547151851634.png (630×212)

 身份驗證

Flask-Admin沒有設(shè)想任何你可以使用的身份驗證系統(tǒng)。因此,默認的,管理界面是完全開放的。

要控制使用管理界面,你可以指定is_accessible方法當(dāng)擴展BaseView類時。那么,舉例,如果你使用Flask-Login做身份驗證,下面的代碼確保只有已登入的用戶能訪問視圖:
 

class MyView(BaseView):
  def is_accessible(self):
    return login.current_user.is_authenticated()

你也可以實施基于策略的保密,有條件的允許或不允許使用管理界面的某些部分。如果一個用戶無權(quán)使用某個特定視圖,則菜單項目不可見。
生成URL

在內(nèi)部,視圖類工作于Flask藍圖的頂部,因此你可以使用url_for附帶一個.前綴來獲得局部視圖的URL:
 

from flask import url_for
 
class MyView(BaseView):
  @expose('/')
  def index(self)
    # Get URL for the test view method
    url = url_for('.test')
    return self.render('index.html', url=url)
 
  @expose('/test/')
  def test(self):
    return self.render('test.html')

如果你要在外部生成一個特定視圖的URL,應(yīng)用下面的規(guī)則:

    你可以覆蓋endpoint名稱通過傳送endpoint參數(shù)給視圖類構(gòu)造函數(shù):
   

  admin = Admin(app)
  admin.add_view(MyView(endpoint='testadmin'))
   
  # In this case, you can generate links by concatenating the view method name with an endpoint:
   
  url_for('testadmin.index')

    如果你不覆蓋endpoint名稱,類名的小寫形式會用于生成URL,像這樣:
    
    url_for('myview.index')

    對基于模型的視圖規(guī)則不一樣——模型類名稱會被使用如果沒有提供endpoint名稱?;谀P偷囊晥D下一節(jié)解釋。

模型視圖

模型視圖允許你為數(shù)據(jù)庫中的每個模型增加專用的管理頁面。通過創(chuàng)建ModelView類實例做這個,ModelView類可從Flask-Admin內(nèi)置的ORM后端引入。一個SQLAlchemy后端的例子,你可以這樣使用:
 

from flask.ext.admin.contrib.sqla import ModelView
 
# Flask and Flask-SQLAlchemy initialization here
 
admin = Admin(app)
admin.add_view(ModelView(User, db.session))

這創(chuàng)建一個User模型的管理界面。默認的,列表視圖看起來是這樣的:

201547151933319.png (630×374)

 要定制這些模型視圖,你有兩個選擇:一是覆蓋ModelView類的公有屬性,二是覆蓋它的方法。

例如,假如你要禁用模型創(chuàng)建功能并且只在列表視力顯示某些列,你可以這樣做:

from flask.ext.admin.contrib.sqla import ModelView
 
# Flask and Flask-SQLAlchemy initialization here
 
class MyView(ModelView):
  # Disable model creation
  can_create = False
 
  # Override displayed fields
  column_list = ('login', 'email')
 
  def __init__(self, session, **kwargs):
    # You can pass name and other parameters if you want to
    super(MyView, self).__init__(User, session, **kwargs)
 
admin = Admin(app)
admin.add_view(MyView(db.session))

覆蓋表單元素有些棘手,但還是可能的。這個例子是關(guān)于如何建立一個包含有只允許使用預(yù)定義值的名為status的列的表單,并使用SelectField:
 

from wtforms.fields import SelectField
 
class MyView(ModelView):
  form_overrides = dict(status=SelectField)
  form_args = dict(
    # Pass the choices to the `SelectField`
    status=dict(
      choices=[(0, 'waiting'), (1, 'in_progress'), (2, 'finished')]
    ))

通過繼承BaseModelView類和實現(xiàn)數(shù)據(jù)庫相關(guān)的方法為不同的數(shù)據(jù)庫后端(比如Mongo等)增加支持是相對容易的。

關(guān)于如何定制基于模型的管理視圖的行為請參考flask.ext.admin.contrib.sqla文檔。
文件管理

Flask-Admin擁有另一個便利的特性——文件管理。它給予你管理服務(wù)器文件的能力(上傳、刪除、重命名等)。

這是一個簡單的例子:
 

from flask.ext.admin.contrib.fileadmin import FileAdmin
 
import os.path as op
 
# Flask setup here
 
admin = Admin(app)
 
path = op.join(op.dirname(__file__), 'static')
admin.add_view(FileAdmin(path, '/static/', name='Static Files'))

例子截圖:

201547152006840.png (623×539)

你可以禁用上傳、禁用文件或目錄刪除、限制文件上傳類型等等。關(guān)于怎么做這些請查看flask.ext.admin.contrib.fileadmin文檔。

相關(guān)文章

  • Python+Turtle實現(xiàn)繪制可愛的小倉鼠

    Python+Turtle實現(xiàn)繪制可愛的小倉鼠

    肉嘟嘟的小動物很是可愛,這篇文章主要為大家介紹一下如何運用Python中的turtle庫控制函數(shù)繪制小倉鼠,文中的實現(xiàn)方法講解詳細,感興趣的可以嘗試一下
    2022-10-10
  • 用Python讀取幾十萬行文本數(shù)據(jù)

    用Python讀取幾十萬行文本數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于用Python讀取幾十萬行文本數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Python入門教程(二十四)Python的迭代器

    Python入門教程(二十四)Python的迭代器

    這篇文章主要介紹了Python入門教程(二十四)Python的迭代器,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python collections模塊使用方法詳解

    Python collections模塊使用方法詳解

    這篇文章主要介紹了Python collections模塊使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • pyqt和pyside開發(fā)圖形化界面

    pyqt和pyside開發(fā)圖形化界面

    選擇PyQt或PySide來開發(fā)圖形界面是因為Python和Qt的跨平臺特性,Qt5甚至支持iOS和Android,并且開發(fā)相同的軟件,Python的效率是極高的,下面看使用示例
    2014-01-01
  • 一文帶你安裝opencv與常用庫(保姆級教程)

    一文帶你安裝opencv與常用庫(保姆級教程)

    Python OpenCV是一種流行的計算機視覺庫,使用它可以進行圖像處理、視頻處理等操作,下面這篇文章主要給大家介紹了關(guān)于安裝opencv與常用庫的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • python實現(xiàn)Adapter模式實例代碼

    python實現(xiàn)Adapter模式實例代碼

    這篇文章主要介紹了python實現(xiàn)Adapter模式實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python如何實現(xiàn)質(zhì)數(shù)求和

    python如何實現(xiàn)質(zhì)數(shù)求和

    這篇文章主要介紹了python如何實現(xiàn)質(zhì)數(shù)求和,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Django獲取model中的字段名和字段的verbose_name方式

    Django獲取model中的字段名和字段的verbose_name方式

    這篇文章主要介紹了Django獲取model中的字段名和字段的verbose_name方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 教你pycharm運行Django第一個項目

    教你pycharm運行Django第一個項目

    本文主要介紹了教你pycharm運行Django第一個項目的實現(xiàn),文中通過圖文示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評論