EarlGrey:继两篇Django教程之后,今天开始发Flask教程。大家可以对比一下两个框架。本文来自MIllyn的投稿,可能会分三部分发布。
本文只授权于编程派及本人博客、微信发表。
其他网站、微信号请勿转载!
上次我在编程派发表了一篇关于如何备份文件至七牛的文章,不说好坏,文章发表出去之后我思考了很多,最重要的一点是:如果我是读者,我会愿意阅读完整这篇文章吗?
如果自己是读者该怎样去文章,我是为了什么去读文章,读文章之后我能获得什么?解决现有的问题?还是照搬一些代码到自己的程序上?我们到底为什么要写代码和阅读?我最近一直在思考这些问题。
所以,今天我想以一个全新的视角去写一篇文章,也许会不成功。但我想尝试一下不同的写作视角。
本文的标题是《如果你也在写Flask》。顾名思义,这是一篇关于Flask开发的文章。本文将包含但不限于以下内容:
Flask是什么
使用Flask制作自己的博客
扩展性到底在哪里
从0到1该如何学习
Flask是由Python语言编写开发而成的轻量级
Web服务框架,Flask是由Armin Ronacher制造的一个愚人节玩笑而发展至今。关于Flask更多权威的介绍请访问Wiki浏览-[点击访问][1]。
EarlGrey:我在这篇文章《这可能是开发者社区最成功的愚人节玩笑》 中较为详细地介绍了Flask背后的由来。
Flask的快捷轻便可扩展性高的优点,可供于我想到什么去开发什么的想法,我不用考虑太多。只用想现在我可能想要做一个什么了,那么Flask就可以做到。Flask拥有太多扩展包,你只需要了解这些扩展包的使用方法就可以做到很多你意想不到的功能。
Flask是基于Python所编写的快捷Web框架,那出现一个疑问了,Flask和Python到底有多大的关联?这是一个很深入的问题,而我的理解是Flask即Python,Python非Flask,而我也不会去解释为什么。因为这是每个人的看法,我不想每位看文章的朋友因为阅读了我的文章就给思维上了个锁,我发现太多文章都时读者在阅读的过程中把思维给锁住了,这非常影响阅读者的思考。
当然,我并不是说Flask不可以构建大型项目,而大型项目的构建准备工作需要的更多,这些并不在本文的讨论范围之内。以后如果有时间可以跟大家再来探讨“该怎样去思考构建大型项目”。
现在,请思考你对于Flask的理解是?
本章可能会遇到很多困难,在实际操作过程当中如果遇到问题,建议使用Google去搜索问题,搜索时注意关键词的使用可以有助你更好寻找到问题的答案,例如搜索“Flask-Login 文档”,“Flask-SQLalchemy 字段说明”等等……又或者给我发mail或者去sf.gg问一下问题。
发问时请不要用一些愚蠢的提问方式例如“请问我这里是哪里错了?”,“这个错误该如何解决?”,我们应在标题写入对问题的精要部分,使得为你解决问题的人们更有兴致的帮助你。
这里我推荐一本书《学会提问》,如果你有时间可以下载到Kindle或者手机阅读,你当然可以作为厕所读物。慢慢看,细细品。
好了,进入正题,构建Flask-Blog的流程分为以下步骤:
搭建Flask开发环境 / 完全说明
思考数据库模型 / 完全说明
编写逻辑代码 / 完全说明
测试、完善 / 简单描述
部署到公网服务器 / 简单描述
开始扩展你的Blog程序/ 自己完成
所有步骤的注明,会和本文密切相关。我希望读者们可以边看边互动,这样才会有学习的意义。
无论你是使用Linux,Mac,Windows搭建环境都是很轻松的,阅读[官方文档][3]就能做到环境的部署这里我在说明一遍。
Linux and Mac:
sudo pip install virtualenv
Windows:
首先需要把Python根目录下的Script目录指定到系统PATH内,然后执行。最重要的是,你需要在windows下安装GIT,利用Git bash来代替原始CMD。
easy_install pip #安装pip
pip install virtualenv
Mac、Linux
mkdir -p ~/Document/flask-bb & cd ~/Document/flask-bb
#创建文件夹并移动到文件夹
virtualenv venv
#创建virtualenv独立环境
Windows
在你想要的盘符创建一个文件夹名为flask-bb,路径中不要带中文。
# 在项目文件夹内右击选择Git Bash Here
virtualenv venv #创建virtualenv独立环境
Mac、Linux在项目目录下输入
. venv/bin/activate #注意前面有个 . 并空格
# 终端会进入virtualenv环境,并在提示符最前面加入(venv)
Windows系统下,同样在项目文件夹内打开Git Bash
. venv/Script/activate #注意 . 和空格
现在我们已经成功的部署并使用到了virtualenv环境,至于virtualenv到底有什么用呢?它其实就是一个便捷的Python虚拟环境,因为Flask的特性,每个项目里都会有不同扩展包来扩展项目本身。
为了洁癖精神,不把每一个使用的扩展包都安装到根Python环境里。所以我们进行了一个小型的虚拟Python环境,让这些针对于当前项目的Flask扩展包得以应用安装。
提示:virtualenv不仅仅不适用于Flask,还可以是任何Python的开发环境,只要你有需求。你可以针对你不同的项目设定不同的virtualenv环境。
在本文中,我选择使用Mysql作为数据库,虽然sqlite更简单,可随意创建文件,有了问题直接删除。但为了我们在本地开发和实际部署在生产保持数据库的一致,所以在本地和服务器上都使用Mysql,而基于Mysql的GUI管理软件也有很多,大家自行搜索一下就可以在自己的系统环境中安装好Mysql。
本次我使用的是Mysql 5.6版本,并创建一个数据库编码格式为utf8mb4
默认排序规则为utf8mb4_bin
的数据库表。建议创建一个新的账户来管理此数据库表。
部署好Flask环境后,我们需要怎样去运行它呢?
首先我们需要安装Flask。进入virtualenv环境后,运行如下命令:
pip install flask #安装Flask
pip install flask-script
#安装Flask-Script 来代替原生启动管理
pip install flask-SQLAlchemy #安装Flask-SQLAlchemy来管理数据库
pip install mysql-python #安装mysql-python驱动数据库
接下来要特别注意,对于我们现在所需求的FlaskBlog的全部功能的代码都可以写到一个.py文件里,但我非常不推荐这样(我相信也没人会推荐这么做)。如果这样写非常不便于扩展功能,本文全部描述的功能虽然仅限于非常基础的内容,但想要扩展是非常容易的,而把整个项目的文件及文件夹规划好了,更便于我们后期再次扩展开发时的效率!
以下文章所有文件,我会基于根目录来标注文件路径。
例如:
/config.py
则在项目目录根上。
/app/main.py
则在项目目录创建一个app的文件夹下创建main.py
开始编写吧!
/config.py
# -*- coding=utf-8 -*-
'''
要注意的是,这里可以写入多个配置,就仿照DevelopmentConfig这个类一样,继承Config类即可。
并在最下方的Config字典里添加对应的key:value。
'''
class Config:
SECRET_KEY = '' #填入密钥
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = True
class DevelopmentConfig(Config):
SQLALCHEMY_DATABASE_URI = 'mysql://flask:flask@127.0.0.1/flask_dev'
#SQLALCHEMY链接数据库都是以URI方式格式为'mysql://账户名:密码@地址/数据库表名'
config = { 'default': DevelopmentConfig
}
/manage.py
:
# -*- coding=utf-8 -*-
from app import create_app, db
from flask.ext.script import Manager, Shell
app = create_app('default')
manager = Manager(app)if __name__ == '__main__':
manager.run()
/app/__init__.py
# -*- coding=utf-8 -*-
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
/app/main/__init__.py
# -*- coding=utf-8 -*-
from flask import Blueprint
main = Blueprint('main', __name__)
from . import views, errors
/app/errors.py #创建该文件
/app/views.py
# -*- coding=utf-8 -*-
from . import main
@main.route('/')
def index():
return 'Hello World'
现在,在项目根目录下执行python manage.py runserver
即可成功运行Flask,并访问127.0.0.1:5000。
好了,我们完成了第一步,在第一步中我们使用Flask的特性蓝图实现模块化应用,例如我们刚创建的蓝图main
就作为我们展示模块,当有访客浏览我们Blog的时候都是main
在工作,而我们在后台编写文章时就不能使用该蓝图了,应该创建一个新的如admin
来模块化运行。
▼
联系客服