flask-admin 快速打造博客 系列一

minsons

前言:

我想分享flask+flask-admin快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了。所以我主要集中在flask-admin使用上的讲解。如果有需要flask可以去参考一下网易的flask课程,其实想弄一个讲堂的视频教程,可是没有足够好的设备,而且录制视频更像是在表演,感觉一下子适应不过来。可我还是录了一套视频效果不是很好,稍后想分享给大家。

1,准备知识

Flask-admin是基于flask框架的,所以你必须先对flask有一个整体的认识和学习,至少需要知道怎么使用请求,模板响应,数据库使用等等。
1)route 请求的路由规则
2)sqlalchemy 或者其他数据框架的增删改
3)jinja2框架 模板响应的使用

2,依赖库,工具的安装

python 3.6+版本以上,具体的依赖都放在requirements.txt里面,通过pip3进行安装即可
使用pycharm工具,可以直接官网下载
Pycharm非常简单易用,但需要注册码,直接百度搜索:pycharm注册码2017
然后选择一个注册码,就可以激活;或者输入激活的url路径也可以

3,搭建flask web

1)我们来搭建一个flask的使用框架,如果还没有入门的同学,可以借此入一下门。
新建一个项目:file->new project…..
图片描述
在控制台输入:python cleanblog.py 启动服务
图片描述

2)目录结构改造
首先,我们建立apps的python包,在apps里面在建一个blog的python包,这样设置的目的就是把所以功能模块都放在apps下面;
其次,把static和template目录拉到apps目录下;
在根目录,增加config.py 是配置文件,用于配置环境变量的
gendb.py是基于flask-sqlalchemy来生成数据库表的
图片描述

3)整合改造

3.1 整合blueprint
蓝图相当于命名空间,前端路由过来的请求就会被蓝图的地址多映射到不同的处理函数上去。
在blog目录下的__init__.py 文件输入:

from flask import Blueprint
blog = Blueprint('main', __name__)
from . import views

然后再apps的__init__.py里注册蓝图:

# 蓝图
from .blog import blog as main_blueprint
app.register_blueprint(main_blueprint)

其实蓝图的注册是 app.register_blueprint(main_blueprint, url_prefix='/XXXX')
这里的XXXX是请求到该模块下的路径前缀。
弄个测试例子:
blog 目录下的views.py有个函数:

# coding:utf-8
#views.py
from . import blog

@blog.route("/baseinfo",methods=['GET'])
def getbaseinfo():
    return "zhe是 测试页面"

那么请求路径就是 www.mxxx.com/XXXX/baseinfo

3.2 国际化
国际化使用的babelx,一个比较老的库,不是很理想,如果自定义后台页面也许就不需要这么一个库;而且现在babelx的版本要跟flask对得上,不然会有各种异常的
需要在config.py 配置:
BABEL_DEFAULT_LOCALE = 'zh_hans_CN'
然后在apps的__init__.py里注册:

#国际化
from flask_babelex import Babel
babel = Babel(app)

3.3 本地日期渲染
使用flask_moment 来渲染模板的日期,需要注册到app:
moment.init_app(app)

然后再模板就可以使用:

{% block scripts %}
    {{ super() }}
    {{ moment.include_moment() }}  //在前端中通过方法引用moment.js文件
    {{ moment.locale('zh-cn') }}  //将moment.js本地化,否则渲染出来的时间日期都是英文的
{% endblock %}

{% block page_content %}
    {{ super() }}
    <h3>Time now is {{ moment(current_time).format('LLL') }}</h3><hr>
{% endblock %}

可参考:https://www.cnblogs.com/frank...

4.5 整合sqlalchemy
这是我们的一个重点:
第一步:注册:
db = SQLAlchemy()
然后注册到app里:
db.init_app(app)
第二步:定义model
在apps目录建立一个models.py文件,就可以在里面定义模型了:

#coding: utf-8
import hashlib
from datetime import datetime
from . import db

#用户表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, nullable=False)
    username = db.Column(db.String(64), unique=True, nullable=False)
    role = db.Column(db.String(64), nullable=True)
    password_hash = db.Column(db.String(128))
    head_img = db.Column(db.String(128), unique=False, nullable=True)
    create_time  = db.Column(db.DateTime, nullable=True,default=datetime.now)

    def verity_password(originPassword, password):
        from apps.util import common
        newpassword = common.md5(originPassword)
        return password == newpassword


    def __repr__(self):
        return '<User %r>' % self.username

第三步:生成表
gendb.py 主要是生成数据库表脚本的,可以不用,你直接去数据库生成也可以的

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from apps import  create_app
#app.config.from_object('app.config')

# configuration
# SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@117.48.202.102/flaskAdmin'
# app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
# app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True


app = create_app('config.py')

from apps.models import  db
#db.init_app(app)
migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manager.run()

"""
python  gendb.py db init
python  gendb.py db migrate
python  gendb.py db upgrade
"""

其实这个文件是可以通过,然后直接在cmd控制台输入:
Python gendb.py db init (仅第一次使用的时候需要,生成migrations的目录包)
python gendb.py db migrate (生成数据表)
python gendb.py db upgrade (同步到数据库)

第一版就先搭建到这里,接下来我们进入整合flask-admin

github地址 :https://github.com/minsons/xi...
另外,微信也可以打开我的免费视频,效果不怎么样,其实看我文档也够了:
图片描述

阅读 9.5k

深圳九领贸易有限公司CTO,主要负责公司网站及商城的架构设计和发展规划,曾就业于IBM等公司。

55 声望
0 粉丝
0 条评论
推荐阅读
flask-admin 快速打造博客 系列三 (后台模板修改)
可能有些人不喜欢原始的管理后台,虽然看起来还挺干净简练的,不是我要的样子,可以自定义吗?答案当然是可以的。最好是自己通过github下载flask-admin源码,然后自己查看一下后台的源码走向。

minsons8阅读 13.5k评论 3

Go 代码风格没人喜欢?不对,Gofmt 是所有人的最爱...
大家好,我是煎鱼。在任何语言进行编程开发时,只要涉及到多人协作。就一定会遇到一个旷世斗争的大问题。那就是:编码风格。Go 的,PHP 的,Java 的,C++ 的;初级、中级、高级、管理的风格;传统的、互联网的又...

煎鱼2阅读 4.6k评论 1

Go 大佬良心发现,愿意给 map 加清除了?
一个东西来来回回的讨论,关了又开,关了后建新的,新的被 ban 了,又发现新的论据,再打开新的。这在职场工作中很常见,在 Go 的提案讨论中,也出现了。

煎鱼1阅读 2.4k评论 1

Python基于Ui控件解析的自动化实现微信自动回复(关键词自动回复)
微信自动回复其实有很多实现的办法,例如ipad协议、Hook微信是比较常见的,ipad协议价格昂贵不适合个人使用,Hook微信因为是拦截内存,具有封号的风险,虽然风险比较小,但这个问题仍然存在,而且Hook微信依赖版...

TANKING1阅读 956

封面图
Ansible 从入门到实战
简介 {代码...} 基本框架 {代码...} 安装 {代码...} Inventory {代码...} playbook简介 {代码...} 基本结构 {代码...} {代码...} 简单上手 {代码...} {代码...}

BewaterMyfriends1阅读 627

Python多进程——进程池的开启和多进程操作同一个List
为什么要使用多进程目标网站数据量多,想赶时间多获取点东西?数据库大批量的数据需要操作?单纯的想要节省时间,早早下班?............肯定会有人说【多线程】。Python的多线程为了数据安全设置了GIL全局解释器...

ipidea1阅读 581

9 月更新 | Visual Studio Code Python
我们很高兴地宣布,2022 年 9 月发布的适用于 Visual Studio Code Python和Jupyter扩展现已推出!此版本包括以下改进:改进了对 Jupyter 笔记本的 IntelliSense 支持一个新的 Flake8 扩展试行功能:改进的单元测...

微软技术栈1阅读 902

封面图

深圳九领贸易有限公司CTO,主要负责公司网站及商城的架构设计和发展规划,曾就业于IBM等公司。

55 声望
12 粉丝
宣传栏