flask-admin 快速打造博客 系列一
前言:
我想分享flask+flask-admin快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了。所以我主要集中在flask-admin使用上的分享。如果有需要flask可以去参考一下网易的[flask课程][1],其实想弄一个视频教程,可是没有足够好的设备,而且录制视频更像是在表演,感觉一下子适应不过来。可我还是录了一套视频效果不是很好,稍后想分享给大家。
1,准备知识
Flask-admin是基于flask框架的,所以你必须先对flask有一个整体的认识和学习,至少需要知道怎么使用请求,模板响应,数据库使用等等。
1)route 请求的路由规则
2)sqlalchemy 或者其他数据框架的增删改
3)jinja2框架 模板响应的使用
2,依赖库,工具的安装
python 3.6+版本以上,具体的依赖都放在requirements.txt里面,通过pip3进行安装即可
使用pycharm工具,可以直接[官网下载][2]
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/franknihao/p/7374964.html
**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/xiaoblog
另外,微信也可以打开我的免费视频,效果不怎么样,其实看我文档也够了:
[1]: http://study.163.com/course/introduction.htm?courseId=1004091002#/courseDetail?tab=1
[2]: https://www.jetbrains.com/zh/pycharm/specials/pycharm/pycharm.html?utm_source=baidu&utm_medium=cpc&utm_campaign=cn-bai-br-pycharm-ex-pc&utm_content=pycharm-pure&utm_term=pycharm