Flask实战:如何从零开发“知乎”
作为当下十分火热的问答社区,知乎聚集了大量问题者和答题者。
但不少朋友在逛知乎的同时,也不禁想要开发一个像“知乎”这样的问答社区,既能够问题答题,也能拥有用户评论、点赞、收藏、浏览量等诸多完善的功能。
今天,为大家呈上一个步骤详细的问答社区开发训练营《Flask实现一个问答社区》,手把手帮助有一定web基础的同学开发出属于自己的简易“知乎”,并有完整源码可供下载。
此训练营采用的开发环境均为实验楼提供的在线开发环境,无需下载任何软件。
废话不多说,先看看本训练营最终实现的社区效果:
社区主页 搜索功能
教程节选:
(完整源码和教程可查看《Flask实现一个问答社区》获取。)
一、训练营简介
本训练营的目标是使用 Python 的轻量级 Web 框架 Flask 和经典模块化前端框架 layui 实现一个社区项目。实现功能包括:用户注册、登录、邮件激活、发帖、回帖、点赞、回复、采纳、删帖、结帖以及 flask-admin 后台管理等功能。
二、Flask简介
Flask 最初是作为愚人节的玩笑诞生的,后来在很短的时间内大受好评,迅速在 Python Web 开发者中流行开来。如今,Flask 已经成为轻量级 Web 框架的代言人。
Flask 提供的是一个最小化的 Web 框架,对于多年开发经验的老手,可以在此基础上自定义任何你想要添加的功能;而对于初学者,同样可以利用社区中丰富的资源扩展快速上手。在这次训练营的学习过程中,大家会慢慢感受到 Flask 这一特性的魅力。
三、开发环境和配置
1.实验简介
本章介绍 virtualenv 搭建开发环境,以及项目的一些基本配置。
本章主要介绍使用 virtualenv 新建环境,创建项目的配置文件并添加配置,最后使用 Flask Script 扩展运行项目返回一个 Hello,World 页面。
知识点
- virtualenv 的使用
- Flask 应用基本结构
- Flask Scrip
- t 扩展
项目结构
本章项目的文件结构为:
$ tree PyFly
PyFly
|-- fly_bbs
|-- __init__.py
|-- config.py
|-- controllers
|-- __init__.py
|-- manage.py
2.环境准备
我们使用 Python3.5 和 Flask1.1.1 来实现项目,实验环境已经安装了 Python3.5 。
我们用 pip 包管理工具来安装我们的 Flask 框架和相应扩展。在实验楼的线上环境中已经安装了 pip 。
3.virtualenv简介
通常在开发 Python 应用程序的时候,系统中会存在一个或多个 Python 解释器版本,例如实验环境中就有 Python2.7 和 Python3.5 这两个。
如果我们要使用 Python3.5 同时开发多个应用程序,那这些应用程序都会共用一个 Python,就是安装系统的Python3.5 。如果两个项目使用不同版本的依赖包,就会出现冲突。
这种情况下,每个应用需要各自拥有一套“独立”的 Python 运行环境。virtualenv 就是用来为一个应用创建一套“隔离”的 Python 运行环境。
实验环境中已经安装了 virtualenv ,在终端命令行执行如下命令可以查看:
shiyanlou:Code/ $ pip3 freeze | grep -i virtualenv
virtualenv==16.7.5
virtualenv-clone==0.5.3
如果在你自己的本地环境下安装此包,可执行此命令使用 pip 包管理工具安装:
$ sudo pip3 install virtualenv
在实验环境中,pip 是 Python 2.7 的包管理工具,pip3 是 Python3.5 的包管理工具,要注意区分。
使用 virtualenv 的沙盒环境来进行开发,不仅可以使我们避免不同项目不同版本的麻烦,同时它还支持使用 pip freeze > requirements.txt 把自己沙盒环境中的所有依赖包信息导出到一个 requirements.txt 文件中。这样当你切换的一个新环境的时候,不需要一个一个的去下载项目需要的依赖,只需要新环境开启后,在终端输入 pip install -r requirements.txt,pip 就会自动从网上下载并安装所有包。
4.开始使用 virtualenv
首先,我们从终端进入到 /home/shiyanlou/Code 目录下,新建一个虚拟环境:
shiyanlou:~/ $ cd Code
shiyanlou:Code/ $ virtualenv -p python3 venv
Running virtualenv with interpreter /usr/bin/python3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/shiyanlou/Code/venv/bin/python3
Also creating executable in /home/shiyanlou/Code/venv/bin/python
Installing setuptools, pip, wheel...
done.
这条命令会在 Code 文件夹中新建一个文件,pipenv 会把所有下载的包都装进 venv 这个文件。其中 -p 选项后面的参数用于指定 Python 解释器的版本,Python3 就指的是 Python3.5:
shiyanlou:Code/ $ python3 -V
Python 3.5.2
最后一个参数 venv 是自定义的虚拟环境名字,现在可以看到 Code 目录下已经有了虚拟环境的相关目录结构:
shiyanlou:Code/ $ ll
总用量 7K
drwxrwxr-x 5 shiyanlou shiyanlou 4.0K 12\u6708 7 15:06 venv
接下来,激活并进入虚拟环境,这是固定的命令:
shiyanlou:Code/ $ source venv/bin/activate
(venv) shiyanlou:Code/ $
可以看到命令行提示符前面有 (venv) 字样。现在就进入到了虚拟环境,可以使用虚拟环境中的 Python 解释器和 pip 包管理工具。注意在虚拟环境里使用它们,无需在后面加 “3” ,python 和 pip ,不需要写成 python3 和 pip3 。
在虚拟环境中安装 flask 包:
(venv) shiyanlou:Code/ $ pip install flask
Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/
Collecting flask
... ...
如果你在本地操作,要像上面的步骤所示,创建虚拟环境并安装所需依赖包。
此外还需大家注意,我们的实验环境不能保存,每次启动都是新的默认环境,所以大家一定要在实验完成后保存好代码,推荐使用 GitHub 来存储项目代码。
对于 GitHub 和 Git 操作不熟悉的同学,可以学习《 Git 与 GitHub 入门实践 》这门优秀的免费课程。
接下来开始我们的项目。
5.新建项目主目
在 Code 目录下新建一个子目录作为整个项目的主目录。就叫它 PyFly。再在 PyFly 里面新建一个 fly_bbs 文件存放我们的应用内容。然后创建配置文件 configs.py :
$ mkdir -p PyFly/fly_bbs
$ cd PyFly
$ touch fly_bbs/configs.py
在 configs.py 文件中添加如下所示代码:
import os
class DevConfig:
'''开发环境配置'''
MONGO_URI = 'mongodb://localhost:27017/pyfly'
class ProConfig(DevConfig):
'''生产环境配置'''
configs = {
'Dev': DevConfig,
'Pro': ProConfig
}
6.创建视图函数
在 fly_bbs 目录下新建一个子目录 controllers ,用来放置我们项目的交互逻辑:
$ cd /home/shiyanlou/Code/PyFly/fly_bbs
$ mkdir controllers
$ touch controllers/__init__.py
这里先实现一个返回 Hello,World 页面的函数,在 controllers/init.py 文件里写入:
def config_route(app):
@app.route('/')
def home():
return '<h1>Hello, World!</h1>'
7.创建初始化app的函数
在 fly_bbs 目录下新建 init.py 文件并写入创建应用的相关代码:
from flask import Flask
from .configs import configs
from .controllers import config_route
def create_app(config_name):
app = Flask(__name__)
# from_object 会从传入的对象中读取配置信息
app.config.from_object(configs[config_name])
# controllers 中的路由函数
config_route(app)
return app
8.使用Flask Script
为了更容易地进行后面内容的实现和学习,我们使用 flask-script 来运行我们的应用。
在终端虚拟环境下执行如下命令安装此包:
$ pip install flask-script
Flask Script 有一些自带的默认命令,可以用来运行应用,或者开启带应用上下文的命令行。
在 PyFly 目录新建 manager.py 文件,并写入如下代码:
from fly_bbs import create_app
from flask_script import Manager
import os
config_name = os.environ.get('FLASK_CONFIG') or 'Dev'
app = create_app(config_name)
# 把 app 传给 Manager 对象
manager = Manager(app)
if __name__ == '__main__':
manager.run()
9.运行应用
现在,你可以通过 python3 manager.py runserver 命令来运行开发环境服务器了。
运行成功,访问 http://127.0.0.1:5000/ 就可以看到我们的项目显示的 Hello,World 了。
image10.本章总结
本节实验介绍了虚拟环境的作用以及如何使用 virtualenv 创建虚拟环境,在 Code 目录下创建了项目最初的目录结构,编写了配置文件 configs.py 并创建了一个视图函数以打开网站首页,并对 flask-script 进行了使用。
下一节实验我们学习数据库的使用和蓝图的创建。
获取完整教程和源码,可访问实验楼官网的《Flask实现一个问答社区》获取。