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 启动应用: 
