美文网首页开源软件实验室IT小白IT课程分享
Flask实战:如何从零开发“知乎”

Flask实战:如何从零开发“知乎”

作者: 蓝桥云课 | 来源:发表于2020-02-17 15:00 被阅读0次

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

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

    今天,为大家呈上一个步骤详细的问答社区开发训练营《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 了。

    image

    10.本章总结

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

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


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

    相关文章

      网友评论

        本文标题:Flask实战:如何从零开发“知乎”

        本文链接:https://www.haomeiwen.com/subject/ivmbfhtx.html