开篇
最近学习Django开发网页, 后来由于Django开发比较繁琐以及可迁移性较差, 于是转学flask, 从而有了这一篇文章, 顺便测试一下我的博客发文功能:P
项目依赖
虽然flask较Django更轻量, 版本间语法差别不大, 但还是会有一些小坑. 比如在使用flask-sqlalchemy时报错, 原因是版本过新或过旧, 另外flask的扩展包需要另外安装, 这里注意一下就行. 下面列出个人博客项目的安装依赖(python3.5&python3.6测试通过):
Flask_SQLAlchemy==2.1
Flask==1.0.2 Markdown==2.6.11 Flask_Bootstrap==3.3.7.1
数据库
数据库的使用是网页编写的一个非常重要的部分, 基本上读取, 存入, 登录, 注销等等操作都和数据库相关, 本项目使用sqlite3, 操作起来较为简单. 简单总结一下flask-sqlalchemy的使用技巧:
路径:
MySQL: mysql+pymysql://username:password@hostname/database
Postgres: postgresql://username:password@hostname/database SQLite(Unix): sqlite:absolute/path/to/database SQLite(Windows): sqlite:///c:/absolute/path/to/database初始化:
app = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///E:/code/Python/flask/Elvin_Blog/schema.sql'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)
- 操作语句:
User.query.all() # 搜索所有信息User.query.get(id) # 搜索对应主键信息User.query.filter_by(username='').all()User.query.filter_by(username='').first()db.session.add(User(username,password))db.session.commit()# 修改信息User.query.filter_by(id=id).first().username='newusername'db.session.commit()
自定义过滤器
我希望能将markdown格式的内容转化并直接显示, 这就需要用到flask的过滤器功能, 阅读了相关文章, 只需要自定义一个过滤器, 代码如下:
from flask import Markupimport markdown@app.template_filter('toMarkdown')def toMarkdown(content): return Markup(markdown.markdown(content))
通过jinja2调用时, 只需要 { { content|toMartdown }}
即可.
用户登录与登出
通过MD5加密密码并保存在数据库, 使用flask的session, 登录成功后, 代码添加 session['username'] = username
, 同理, 在进入一些诸如管理页面的页面时, 只需要添加 if 'username' in session:
加以判断即可.