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

前言:

我想分享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...
另外,微信也可以打开我的免费视频,效果不怎么样,其实看我文档也够了:
图片描述

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

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

minsons8阅读 13.7k评论 3

Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4k评论 1

日常Python 代码片段整理
1、简单的 HTTP Web 服务器 {代码...} 2、单行循环List {代码...} 3、更新字典 {代码...} 4、拆分多行字符串 {代码...} 5、跟踪列表中元素的频率 {代码...} 6、不使用 Pandas 读取 CSV 文件 {代码...} 7、将列表...

墨城2阅读 340

Unicode 正则表达式(qbit)
前言本文根据《精通正则表达式》和 Unicode Regular Expressions 整理。本文的示例默认以 Python3 为实现语言,用到 Python3 的 re 模块或 regex 库。基本的 Unicode 属性分类 {代码...} 基本的 Unicode 子属性Le...

qbit阅读 4.4k

Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)
由于不同数据库对这种 upsert 的实现机制不同,Sqlalchemy 也就不再试图做一致性的封装了,而是提供了各自的方言 API,具体到 Mysql,就是给 insert statement ,增加了 on_duplicate_key_update 方法。

songofhawk1阅读 2.1k评论 4

封面图
打脸了兄弟们,Go1.20 arena 来了!
大家好,我是煎鱼。大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。当时我们还想着 Go 团队应该不会接纳,至少不会那么快:懒得翻也可以看我再次...

煎鱼1阅读 3.3k

uwsgi 注意事项
http 和 http-socket 选项是完全不同的。第一个生成一个额外的进程,转发请求到一系列的worker (将它想象为一种形式的盾牌,与apache或者nginx同级),而第二个设置worker为原生使用http协议。

zed2015阅读 2.2k

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

61 声望
12 粉丝
宣传栏