用Flask写一个Blog

原文请点击这里

flask

前言

Django一段时间了,总是感觉Django有些笨重,而且各版本之间变化比较大。同时,我在windows7上安装的时候竟然不成功!于是重新拾起之前的Flask作为Django的补充。

Flask资源

这里罗列一下个人学习使用Flask的资源

写个博客练练手吧(又是博客。。。)

国人写的一个开源的博客程序(vmaig_blog)给了很大的启发,不过不支持多用户。数据层Model基本参照这个代码,略有调整。
博客将采用Mysql数据库,Markdown进行文章内容编辑,提供后台管理功能及缓存机制。

初步设计思路

思路

开发环境

  • windows7
  • Editplus
  • python 2.7.9
  • Flask==0.10.1
  • Flask-SQLAlchemy==2.1
  • Flask-Login==0.3.2
  • flask-wtf==0.12
  • Flask-Admin==1.3.0
  • Flask-Cache==0.13.1
  • flask_debugtoolbar
  • Mistune
  • pygments
  • Pillow
  • mysql-python

项目的结构

项目的结构主要参考了“探索 Flask”,其中有一些个人的调整。

blog/
    blog/    #项目的主目录
        static/    #静态文件
        templates/    #模板
        views/    #相关的view放入该目录
        __init__.py    #创建app,并加载相关组件
        caches.py    #缓存
        filter.py    #过滤器
        forms.py    #forms表单
        models.py    #model
        utils.py    #工具
    config/                 
        __init__.py
        default.py      #默认的配置值,可用于所有的环境或者被个人的环境给覆盖。
        development.py    #用于开发环境的配置值。这里你可能会指定本地数据库的 URI。
        production.py    #用于生产环境的配置值。在这里 DEBUG 一定要设置成 False。
        staging.py    #根据开发进度,你可能会有一个模拟生产环境,这个文件主要用于这种场景。
    instance/
        config.py    #这个文件包含了不应该出现在版本控制中的配置变量。 包含像 API 密钥以及包含密码的数据库URIs。
    init_db.py    #数据库初始化脚本
    run.py    #项目运行脚本
    requirements.txt  #项目所使用到的第三方库

部分代码说明

blog/__init__.py的代码如下

#-*- coding: utf-8 -*-
from flask import Flask
from flask import render_template
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
from flask_wtf.csrf import CsrfProtect
from flask_admin import Admin
from flask.ext.cache import Cache

app = Flask(__name__,instance_relative_config=True)
app.config.from_object('config.development')
app.config.from_pyfile('config.py')

login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.init_app(app)

admin = Admin(app, name=u'管理控制台', template_mode='bootstrap3', base_template='admin/blog_master.html')

db = SQLAlchemy(app)
CsrfProtect(app)
cache = Cache(app,config={'CACHE_TYPE': 'simple'})

from .views.site_bp import site_bp
app.register_blueprint(site_bp)
from .views.admin_bp import admin_bp
app.register_blueprint(admin_bp, url_prefix='/admin')

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

from .filter import *

run.py代码如下

#-*- coding: utf-8 -*-
from flask_debugtoolbar import DebugToolbarExtension
from blog import app

if __name__ == '__main__':
    toolbar = DebugToolbarExtension(app)
    app.run(host='0.0.0.0',port=9000,debug=True)

instance/config.py代码如下

#-*- coding: utf-8 -*-
SECRET_KEY = 'Sm9obiBTY2hyb20ga2lja3MgYXNz'
SQLALCHEMY_DATABASE_URI= "mysql://%s:%s@%s/%s" % ('root', '111111', 'localhost', 'flask_blog')

其中SECRET_KEY的生成

import os
os.urandom(24)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,256评论 22 257
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,616评论 6 427
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,860评论 1 61
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,854评论 4 418
  • 醒时,石英钟正在打点,我不知道现在几点了,只听见迷糊的当当声,眼际黢黑一片,脑子昏昏沉沉的....不愿意起身,懒在...
    晓二姑娘阅读 248评论 0 0