Flask-admin使用總結(jié)-創(chuàng)新互聯(lián)

ModelView    表管理,進入權(quán)限
BaseView,expose  自定義視圖
AdminIndexView  進入權(quán)限
FileAdmin   文件管理
from flask_admin import Admin
from flask_admin.contrib.fileadmin import FileAdmin
from flask_admin import Admin, expose, BaseView
from flask_admin.contrib.sqla import ModelView
#flask-admin國際化多語言
from flask_babelex import Babel
app = Flask(__name__)
babel = Babel(app)
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'
# 初始化admin后臺
admin = Admin(app, name='env manager')
# 也可對后臺首頁進行自定義
# 后臺標(biāo)題修改為"導(dǎo)航欄",主頁設(shè)置為welcome.html,后臺url也修改
admin = Admin(app,index_view=AdminIndexView(name='導(dǎo)航欄',template='welcome.html',url='/admin'))
# 或如下,其中MyAdminIndexView()繼承AdminIndexView()
admin = Admin(app,name='管理中心',index_view=MyAdminIndexView(),base_template='admin/my_master.html')
# 定義后臺對表可增加、可編輯、可導(dǎo)出,可搜索,只顯示指定的列
class HashView(ModelView):
    create_modal = True
    edit_modal = True
    can_export = True
    column_searchable_list = ['title']
column_list = ('id', 'title','timestamp','count','content'')
    column_labels = {
        'id':'序號',
        'title' : '新聞標(biāo)題',
        'timestamp':'發(fā)布時間',
        'count':'瀏覽次數(shù)',
        'content':'新聞內(nèi)容'
    }
#或者下面這種寫法
column_labels = dict(
	username='用戶名',
	)
#不顯示指定的列
	column_exclude_list = (
	'password_hash',
	)
# 自定義視圖
# 每個自定義視圖必須提供一個@expose('/') 的index方法,否則會報錯
class UserView(BaseView):
@expose('/')
def index(self):
return self.render('admin/user.html')
@expose('/user_manager')
def user_manager(self):
return self.render('admin/user.html')
class MyNews(BaseView):
    @expose('/', methods=['GET', 'POST'])    def index(self):
        form = NameForm()        return self.render('postnews.html', form=form)
#postnews.html在templates目錄下
# 添加表管理、自定義視圖
admin.add_view(HashView(User, db.session, name='用戶'))
admin.add_view(HashView(Role, db.session, name='角色'))
admin.add_view(HashView(Env, db.session, name='環(huán)境配置'))
admin.add_view(UserView(name='user_manager'))
admin.add_view(MyNews(name=u'發(fā)表新聞'))
# category是可選的目錄,且會自動添加上去admin.add_view(UserView(User, db.session, name='信息', category='用戶管理'))
# 添加文件管理
admin.add_view(FileAdmin(config_path, '/file/', name='Config Files'))
用Flask-Login做身份驗證
修改templates下的模板文件index.html,實現(xiàn)管理員登錄帶有CSRF 令牌的安全表單
{% extends 'admin/master.html' %}
{% block body %}
{{ super() }}
{% if current_user.is_authenticated %}
歡迎來到后臺管理系統(tǒng)!
{% else %}
{{ form.hidden_tag() if form.hidden_tag }}
{% for f in form if f.type != 'CSRFTokenField' %}
{{ f.label }}
{{ f }}
{% if f.errors %}
{% for e in f.errors %}
{{ e }}
{% endfor %}
{% endif %}
{% endfor %}
登陸
{{ link | safe }}
{% endif %}
{% endblock body %}
定義登錄表單
from wtforms import fields, validators class
LoginForm(FlaskForm): 
login = fields.StringField(label='管理員賬號', validators=[validators.required()]) 
password = fields.PasswordField(label='密碼', validators=[validators.required()]) 
def validate_login(self, field): 
    user = self.get_user() 
    if user is None: 
        raise validators.ValidationError('賬號不存在') 
#密碼不能明文存儲,用sha256_crypt加密
    if not sha256_crypt.verify(self.password.data, user.password): 
        raise validators.ValidationError('密碼錯誤') 
def get_user(self): 
#AdminUser是存儲管理員用戶密碼的表
    return db.session.query(AdminUser).filter_by(login=self.login.data).first()
#安裝flask-login
pip install flask-login
#初始化,調(diào)用init_login()函數(shù)
from flask_login import current_user, login_user, logout_user, LoginManager
def init_login():
    login_manager = LoginManager()
    login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
    return db.session.query(AdminUser).get(user_id)
#然后在需要管理員權(quán)限的才能看到的視圖中添加代碼
#決定身份驗證可見def is_accessible(self):
    return current_user.is_authenticated
圖片上傳
#假設(shè)pics為需要上傳圖片的字段
import os.path as op
def thumb_name(filename):
    name, _ = op.splitext(filename)
    return secure_filename('%s-thumb.jpg' % name)
class MyForm(BaseForm):
    upload = ImageUploadField('File', thumbgen=prefix_name)
import os.path as op
form_extra_fields = {
'pics': upload.ImageUploadField(label='圖片',base_path=file_path),
}
可以使用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')
建立只允許使用預(yù)定義值的名為status的列的表單:
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')]
        ))
#添加redis控制臺
from flask_admin.contrib import rediscli
admin.add_view(rediscli.RedisCli(Redis()))
可擴展的模板:對應(yīng)繼承 列表、創(chuàng)建、編輯頁
admin/model/list.html
admin/model/create.html
admin/model/edit.html
例如:
{% extends 'admin/model/edit.html' %}
{% block body %}
MicroBlog Edit View
{{ super() }}
{% endblock %}
使視圖使用模板
class MicroBlogModelView(ModelView):
    edit_template = 'microblog_edit.html'
    # create_template = 'microblog_create.html'
    # list_template = 'microblog_list.html'
如果使用基礎(chǔ)模板,則在基礎(chǔ)函數(shù)中添加
admin = Admin(app, base_template='microblog_master.html')
防止csrf***保護
#指定form_base_class 參數(shù)
from flask_admin.form import SecureForm
from flask_admin.contrib.sqla import ModelView
class CarAdmin(ModelView):
    form_base_class = SecureForm

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的融安網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:Flask-admin使用總結(jié)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://bm7419.com/article42/ddjgec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、微信小程序、用戶體驗軟件開發(fā)、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計