Flask 项目实战|从零开发 “StackOverflow” 问答网站
1、提问功能;
2、回答功能; 3、点赞功能; 4、用户管理功能;
1、开发语言的选择; 2、框架的选择; 3、数据库的设计; 4、接口开发; 5、部署; ……
效果显示
网站首页
问题详情页
课程地址:
欢迎来到 Flask 的世界
为什么要学习 Flask ?
正如上面所说, Flask 是一个 Web “微”框架,我们使用 Flask 可以快速的搭建网站。在互联网时代,一个好的 idea 不能尽快展现在人们的面前,确实是令开发者很苦恼的事情。
容易学习。学完了 Python 基础之后想要接触 Web 开发,Flask 非常易于学习。同时,稍后你能看到示例代码所展示的那样,这是一个十分简单的框架。你的大脑很自然地就适应它了。使用 Flask ,可以更快地开发。
Flask 有非常活跃、生机勃勃的社区:很多人会推荐你从 Flask 入手, Flask 是最好的现代 web 开发的 Python 框架之一。
“微” 是什么意思?
环境准备
/home/shiyanlou/Code
目录下,升级 pip3 到最新版:
$ cd ~/Code
$ sudo pip3 install -U pip
使用 virtualenv 创建虚拟环境
安装 virtualenv
# 此命令无需在实验环境中执行
$ sudo pip3 install virtualenv
$ sudo pip3 install -U virtualenv
-U
选项等同于
--upgrade
,采用简写的选项可以少敲几下键盘。
补充:想了解更多关于 virtualenv 的信息可以参考 Python 指南——虚拟环境。
使用 virtualenv
$ virtualenv -p python3 venv
-p python
意为基于实验环境中的 Python3.5 创建虚拟环境,新建环境中的默认 Python 解释器就是 Python3.5 ;最后一个参数
venv
表示虚拟环境的目录名,虚拟环境创建后会自动在当前目录下生成一个环境目录,目录的名字就是 venv 。
$ source venv/bin/activate
python
命令,它指向 Python3.5 ;可以直接使用
pip
命令,它指向虚拟环境的包管理工具。
$ pip install flask
pip freeze
命令可以查看当前已经安装的所有第三方库及其版本。如上图所示,除了 Flask 最新的 1.1.1 版本已经被安装,一并安装的还有一些依赖包。
$ source venv/bin/activate
创建项目的目录结构
/home/shiyanlou/Code
目录下创建多级目录作为项目的主目录结构:
$ mkdir -p stackoverflow/stackoverflow
/home/shiyanlou/Code/stackoverflow
目录,创建
manage.py
文件,该文件用于编写创建 Flask 应用的代码:
$ cd stackoverflow
$ touch manage.py
/home/shiyanlou/Code/stackoverflow/stackoverflow
目录下,创建一些必要的文件和目录:
$ cd stackoverflow
$ touch app.py models.py configs.py __init__.py
$ mkdir handlers templates
/home/shiyanlou/Code/stackoverflow
为文件主目录,对其中的文件和目录做一些说明:
stackoverflow/__init__.py
为非必须文件。在需要的时候,可以向其中引入一些变量,以使得上级目录中的 manage.py 等文件可以将 stackoverflow 作为模块引入其中的变量。stackoverflow/app.py
为项目的核心文件,定义创建应用的函数以及注册插件、蓝图等代码写在这里。stackoverflow/configs.py
为配置文件,对于不同的场景,需要提供不同的配置条件。常见的场景有测试、开发、生产等。stackoverflow/models.py
为编写映射类的文件。stackoverflow/handlers
为蓝图目录,将项目分为多个部分:首页、注册、登录/登出为一部分;问答相关的路由为一部分等等。stackoverflow/templates
为前端模板文件目录,用于存放 HTML 文件。stackoverflow/static
为静态文件目录,该目录暂未创建。
一个最基本的项目
stackoverflow/app.py
文件,将以下代码写入其中:
from flask import Flask
app = Flask ( __name__ )
@app.route ( '/' )
def index ():
return 'Hello World'
if __name__ == '__main__' :
app . run ( host = '0.0.0.0' , port = 8080 )
第 1 行引入 Flask 类,该类的实例即为 Web 应用,其有一个 run 方法,可以启动 Web 项目。
第 2 行
app = Flask(__name__)
创建 Flask 类的实例并赋值给变量 app ,其中的参数__name__
可以写成任何字符串,通常默认都会写成__name__
,即文件名app
。第 3 至 5 行定义的是路由函数 index 。应用启动后,当浏览器访问网站主页时,服务器会调用该函数来处理请求并返回带有 'Hello World' 字符串的响应对象。
最后一行,调用应用的 run 方法启动应用。实验楼在 WebIDE 环境中提供了一个 “Web 服务” 功能,可以直接进入到实验环境中 8080 端口运行的网站。所以我们在 app.run 方法中需要提供 '0.0.0.0' 作为 host 参数的值以便任何局域网内的浏览器都可以请求该网址,并且将端口号设置为 8080 。
python app.py
启动应用: