【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

这篇具有很好参考价值的文章主要介绍了【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

1、简介

1.1 flask

flask作为一个微框架,Flask 允许您以很少的开销构建 Web 服务。 它为您(设计师)提供了自由,以适合您的方式实施您的项目 特定应用。
【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
一个最小的 Flask 应用如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

1.2 flask-admin

Flask-Admin是一个batteries-included,易于使用的Flask扩展,可让您 向 Flask 应用程序添加管理界面。它的灵感来自 django-admin 包,但以这样的方式实现 开发人员可以完全控制生成的应用程序的外观、感觉和功能的一种方式。开箱即用,Flask-Admin可以很好地与各种ORM配合使用,包括:

  • SQLAlchemy,
  • MongoEngine,
  • pymongo and
  • Peewee.

Flask-Admin的最大特点是灵活性。它旨在提供一组可用于 构建任何复杂的管理界面。因此,首先,您可以立即创建一个非常简单的应用程序, 为每个模型自动生成 CRUD 视图。但是,您可以更进一步并自定义这些视图和表单。 根据需要出现。

  • 微服务和API的世界中,Flask-Admin解决了在顶部构建管理界面的现有数据模型。毫不费力,它让您可以通过用户友好的界面管理 Web 服务的数据。

  • Flask-Admin背后的基本概念是,它可以让您 通过对各个视图进行分组来构建复杂的界面 一起在类中:您在前端看到的每个网页都代表一个 已显式添加到接口的类上的方法。

  • 当这些视图类绑定到特定视图类时,它们特别有用 数据库模型, 因为它们允许您将所有常用的创建、读取、更新、删除 (CRUD) 视图逻辑组合到单个自包含中 每个模型的类。

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

2、安装

2.1 安装库

通过pip安装如下:

pip install flask-admin

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

2.2 打印库版本

打印flask-admin库的版本信息:
方法1:

## 格式:pip show 库名
pip show flask-admin

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
方法2:

## 格式:pip list
pip list flask-admin

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
方法3:

## 格式:库名.__version__
import flask_admin
print('flask_admin版本:',flask_admin.__version__)

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

3、初始化

第一步是为 Flask 应用初始化一个空的管理界面:

from flask import Flask
from flask_admin import Admin

app = Flask(__name__)

# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'

admin = Admin(app, name='爱看书的小沐', template_mode='bootstrap3')
# Add administrative views here

app.run()

运行上面脚本之后,命令行输出如下信息:
【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
打开浏览器访问:

http://127.0.0.1:5000/

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
换一个地址试试:

http://127.0.0.1:5000/admin

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

页面终于正常显示了。
上面代码中的这一行定义。

admin = Admin(app, name='爱看书的小沐', template_mode='bootstrap3')

可以分开写成如下多行。

admin = Admin(name='爱看书的小沐')
# Add views here
admin.init_app(app)

4、添加独立视图(BaseView)

4.1 管理接口索引页

  • test.py
from flask import Flask
from flask_admin import Admin, BaseView, AdminIndexView, expose

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'

# AdminIndexView:当访问/admin/url时,默认的管理接口索引页;它可以通过将你自己的视图类传递给Admin构造函数来重写
## index_view = AdminIndexView(name=u'首页', template='index.html')
## admin = Admin(app, name=u"后台管理系统", template_mode='bootstrap3', index_view=index_view)

class MyAdminIndexView(AdminIndexView):
    @expose("/")
    def homepage(self):
        return self.render("index.html")

admin = Admin(
    app, 
    name=u"后台管理系统",
    index_view=MyAdminIndexView(name="预览页"),
    template_mode='bootstrap3'
)

app.run()
  • index.html
{% extends 'admin/master.html' %}
{% block body %}
    Hello World from 爱看书的小沐!
{% endblock %}

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

4.2 自定义视图

① 每一个自定义视图必须提供一个@expose(‘/’)的index方法,否则会报错
② 可以定义多个独立视图类,然后将其定义到同一个类型里面

import os.path as op
from flask import Flask
from flask_admin import Admin, BaseView, AdminIndexView, expose

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'

# AdminIndexView:当访问/admin/url时,默认的管理接口索引页;它可以通过将你自己的视图类传递给Admin构造函数来重写
class MyAdminIndexView(AdminIndexView):
    @expose("/")
    def homepage(self):
        return self.render("admin/index.html")

admin = Admin(
    app, 
    name=u"后台管理系统",
    index_view=MyAdminIndexView(name="预览页"),
    template_mode='bootstrap3'
)

#admin = Admin(
#    app,
#    index_view=AdminIndexView(
#        name='导航栏',
#        template='welcome.html',
#        url='/admin'
#    )
#)

class MyView1(BaseView):
    @expose('/')
    def main(self):
        return self.render('admin/oneview.html')

class MyView2(BaseView):
    @expose('/')
    def main(self):
        return self.render('admin/twoview.html')

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

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

# 增加独立视图
admin.add_view(MyView1(name='页面一', category='测试视图', endpoint="/onepage/"))
admin.add_view(MyView2(name='页面二', category='测试视图', endpoint="/twopage/"))

admin.add_view(MyView3(name='页面三'))

admin.add_view(MyView3(name='Hello 1', category='测试视图2', endpoint='test1'))
admin.add_view(MyView3(name='Hello 2', category='测试视图2', endpoint='test2'))
admin.add_view(MyView3(name='Hello 3', category='测试视图2', endpoint='test3'))

app.run()

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

class MyNews(BaseView):
    @expose('/', methods=['GET', 'POST'])
    def index(self):
        form = NameForm()
        return self.render('donews.html', form=form)
        
admin.add_view(MyNews(name=u'发表新闻'))

5、添加模型视图(ModelView)

模型视图允许您添加一组专用的管理页面,用于管理数据库中的任何模型。通过创建 ModelView 类的实例,您可以从 Flask-Admin 的内置 ORM 后端之一导入该类。


import os.path as op
from flask import Flask
from flask_admin import Admin, BaseView, AdminIndexView, expose
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
app.config['DEBUG'] = True
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'
app.config['SQLALCHEMY_ECHO'] = True

# app.config['SECRET_KEY'] = 'super-secret'
# app.config['SECURITY_PASSWORD_HASH'] = 'pbkdf2_sha512'
# app.config['SECURITY_PASSWORD_SALT'] = '16a0af319890f662055ba10aecff37e7e033db3fba737e55'
# app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = 'email'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost:3306/flask_test'

db = SQLAlchemy(app)
admin = Admin(app)

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    created_at = db.Column(db.TIMESTAMP)
    updated_at = db.Column(db.TIMESTAMP)
    username = db.Column(db.String(128))
    email = db.Column(db.String(128))
    nickname = db.Column(db.String(128))
    avatar = db.Column(db.String(255))
    password_hash = db.Column(db.String(128))
    status = db.Column(db.Integer)

class MyView(ModelView):
    # Disable model creation
    can_create = False

    # Override displayed fields
    column_list = ('username', 'email')

    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(MyView, self).__init__(Users, session, **kwargs)

admin.add_view(MyView(db.session))
# admin.add_view(ModelView(Users, db.session))

app.run()

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

将列名中文化,也就是需要重写column_labels。

class MyView(ModelView):
    # Disable model creation
    can_create = False

    # Override displayed fields
    column_list = ('id', 'username', 'email')

    column_labels = {
        'id': u'序号',
        'username' : u'用户名',
        'email':u'电子邮箱',
    }
    
    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(MyView, self).__init__(Users, session, **kwargs)

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

6、添加特殊视图

6.1 Managing Files & Folders

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.fileadmin import FileAdmin
import os.path as op

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'

admin = Admin(app, name='爱看书的小沐', template_mode='bootstrap3')

path = op.join(op.dirname(__file__), 'static')
admin.add_view(FileAdmin(path, '/static/', name='文件管理'))

app.run()

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
增加参数控制如下:

import os.path as op
from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.fileadmin import FileAdmin
from flask_babelex import Babel

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'
app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'

babel = Babel(app)
admin = Admin(app, name='爱看书的小沐', template_mode='bootstrap3')

class MyAdmin(FileAdmin):
    can_upload = False
    can_download = False
    can_delete = False
    can_delete_dirs = False
    can_mkdir = False
    can_rename = False
    allowed_extensions = ('swf', 'jpg', 'gif', 'png')

path = op.join(op.dirname(__file__), 'static')
admin.add_view(MyAdmin(path, '/static/', name='文件管理'))

app.run()

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

6.2 Adding A Redis Console

另一个可用的插件是 Redis 控制台。如果您有 Redis 实例与您的应用在同一台计算机上运行,您可以:

from flask import Flask
from flask_admin import Admin

from redis import Redis
from flask_admin.contrib import rediscli

app = Flask(__name__)
# set optional bootswatch theme
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'

admin = Admin(app, name='爱看书的小沐', template_mode='bootstrap3')

# Flask setup here
admin.add_view(rediscli.RedisCli(Redis()))

app.run()

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

7、中文支持

from flask_babelex import Babel
# 使用flask_babelex可以显示中文,该模块用于做国际化
babel = Babel(app)

有两种方式支持显示中文,分别如下:
① app设置增加如下:BABEL_DEFAULT_LOCALE = “zh_CN”

app.config['BABEL_DEFAULT_LOCALE'] = 'zh_CN'

② 增加如下方法

from flask import request, session
# 如下方法也可以定义中文展示,其效果类似于BABEL_DEFAULT_LOCALE = "zh_CN"
@babel.localeselector
def get_locale():
    if request.args.get('lang'):
        session['lang'] = request.args.get('lang')
    return session.get('lang', 'zh_Hans_CN')

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

8、身份验证

Flask-Admin没有设想任何你可以使用的身份验证系统。因此,默认的管理界面是完全开放的。

要控制使用管理界面,你可以指定is_accessible方法当扩展BaseView类时。那么,举例,如果你使用Flask-Login做身份验证,下面的代码确保只有已登入的用户能访问视图:

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

一般后台并不是对所有用户开放的,所有牵扯到了管理员权限,这一块我是依靠flask-login这个扩展实现的。

class MyView(ModelView):
    def is_accessible(self):
        if current_user.is_authenticated and current_user.username == "admin":
            return True
        return False

    # Disable model creation
    can_create = False

    # Override displayed fields
    column_list = ('id', 'username', 'email')

    column_labels = {
        'id': u'序号',
        'username' : u'用户名',
        'email':u'电子邮箱',
    }
    
    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(MyView, self).__init__(Users, session, **kwargs)

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)
此刻用户管理分页被隐藏了。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)文章来源地址https://www.toymoban.com/news/detail-431695.html

到了这里,关于【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【小沐学前端】Node.js搭建HTTPS 服务器

    HTTPS是什么?HTTPS是基于TLS/SSL的HTTP协议。 HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存

    2024年02月03日
    浏览(45)
  • 【小沐学Python】Python实现Web图表功能(Dash)

    https://dash.plotly.com/ https://dash.gallery/Portal/ Dash 是一个用于构建Web应用程序的 Python 库,无需 JavaScript 。 Dash是下载量最大,最值得信赖的Python框架,用于构建ML和数据科学Web应用程序。 Dash是一个用来创建 web 应用的 python 库,它建立在 Plotly.js(同一个团队开发)、React 和 Flask 之上

    2024年02月04日
    浏览(58)
  • flask+Python+Vue实现前后端分离的web项目并部署至云服务器

    1 后台+算法模型 1.1 训练机器学习模型 1.2 基于Flask框架搭建后台接口 注意:前后端跨域问题,可引入CORS解决,具体如代码: 2 前端搭建 3 云服务器部署 详细设置教程可参考linux CentOS 宝塔面板安装设置教程 安装Nginx和python项目管理器,后续可在面板上操作,完成项目打包上传

    2024年02月07日
    浏览(60)
  • 【小沐学NLP】Python实现聊天机器人(微软Azure机器人服务)

    🍺NLP开发系列相关文章编写如下🍺: 1 🎈【小沐学NLP】Python实现词云图🎈 2 🎈【小沐学NLP】Python实现图片文字识别🎈 3 🎈【小沐学NLP】Python实现中文、英文分词🎈 4 🎈【小沐学NLP】Python实现聊天机器人(ELIZA))🎈 5 🎈【小沐学NLP】Python实现聊天机器人(ALICE)🎈 6

    2024年02月12日
    浏览(63)
  • 使用IIS服务器部署Flask python Web项目

    参考文章 参考文章 将Flask应用程序部署到IIS服务器上需要一些步骤,因为IIS是为.NET应用程序设计的。要将Flask Python Web项目部署到IIS服务器,您需要使用一个称为\\\"FastCGI\\\"的桥接工具来连接IIS和Python应用程序。以下是将Flask应用程序部署到IIS服务器的一般步骤: 安装IIS和FastCG

    2024年04月16日
    浏览(51)
  • 【小沐学Python】Python实现语音识别(SpeechRecognition)

    https://pypi.org/project/SpeechRecognition/ https://github.com/Uberi/speech_recognition SpeechRecognition用于执行语音识别的库,支持多个引擎和 API,在线和离线。 Speech recognition engine/API 支持如下接口: 以上几个中只有 recognition_sphinx()可与CMU Sphinx 引擎脱机工作, 其他六个都需要连接互联网。另

    2024年02月04日
    浏览(61)
  • 【小沐学Python】Python实现语音识别(Whisper)

    https://github.com/openai/whisper Whisper 是一种通用的语音识别模型。它是在包含各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。 Open AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支

    2024年02月04日
    浏览(154)
  • 【小沐学NLP】Python实现聊天机器人(微软小冰)

    🍺NLP开发系列相关文章编写如下🍺: 1 🎈【小沐学NLP】Python实现词云图🎈 2 🎈【小沐学NLP】Python实现图片文字识别🎈 3 🎈【小沐学NLP】Python实现中文、英文分词🎈 4 🎈【小沐学NLP】Python实现聊天机器人(ELIZA))🎈 5 🎈【小沐学NLP】Python实现聊天机器人(ALICE)🎈 6

    2024年02月05日
    浏览(57)
  • python flask创建服务器实现文件的上传下载,已获千赞

    } 二、后端代码(python) import os from string import Template from flask import Flask, send_file,request,jsonify from flask_cors import CORS import time app = Flask( name ) absolute = os.path.dirname( file ) CORS(app) app.debug = True FOLDER = os.path.join(absolute, ‘save_file’) HOST = “localhost” PORT = 8080 UPLOAD = ‘upload’ app.config

    2024年04月22日
    浏览(46)
  • 【小沐学Python】Python实现在线电子书(Sphinx + readthedocs + github + Markdown)

    Sphinx 是一个 文档生成器 ,您也可以把它看成一种工具,它可以将一组纯文本源文件转换成各种输出格式,并且自动生成交叉引用、索引等。也就是说,如果您的目录包含一堆 reStructuredText 或 Markdown 文档,那么 Sphinx 就能生成一系列HTML文件,PDF文件(通过LaTeX),手册页等。

    2024年02月10日
    浏览(97)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包