Flask部署模型(Flask实战如何从零开发)

作为当下十分火热的问答社区,知乎聚集了大量问题者和答题者。

但不少朋友在逛知乎的同时,也不禁想要开发一个像“知乎”这样的问答社区,既能够问题答题,也能拥有用户评论、点赞、收藏、浏览量等诸多完善的功能。

今天,为大家呈上一个步骤详细的问答社区开发训练营《Flask实现一个问答社区》,手把手帮助有一定web基础的同学开发出属于自己的简易“知乎”,并有完整源码可供下载。

此训练营采用的开发环境均为实验楼提供的在线开发环境,无需下载任何软件。

废话不多说,先看看本训练营最终实现的社区效果:

Flask部署模型(Flask实战如何从零开发)(1)


教程节选:

(完整源码和教程可登录实验楼官网,搜索《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 扩展

项目结构

本章项目的文件结构为:

$ mkdir -p PyFly/fly_bbs $ cd PyFly $ touch fly_bbs/configs.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 :

import os class DevConfig: '''开发环境配置''' MONGO_URI = 'mongodb://localhost:27017/pyfly' class ProConfig(DevConfig): '''生产环境配置''' configs = { 'Dev': DevConfig, 'Pro': ProConfig }

在 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 了。

Flask部署模型(Flask实战如何从零开发)(2)

10.本章总结

本节实验介绍了虚拟环境的作用以及如何使用 virtualenv 创建虚拟环境,在 Code 目录下创建了项目最初的目录结构,编写了配置文件 configs.py 并创建了一个视图函数以打开网站首页,并对 flask-script 进行了使用。

下一节实验我们学习数据库的使用和蓝图的创建。


获取完整教程和源码,可访问实验楼官网的《Flask实现一个问答社区》。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页