stackoverflow是什么网站(Flask)

StackOverflow 是全球最大的 IT 技术问答网站之一,在程序员界无人不知无人不晓,堪称“面向搜索引擎编程”神器。下图就是 StackOverflow 网站首页图:是不是有种似曾相识的感觉?其实国内很多技术问答网站都是仿照 StackOverflow 来做的,那么问题来了,开发一个 StackOverflow 这样的网站需要哪些工作呢?首先我们来看看 StackOverflow 有哪些主要功能:1、提问功能;2、回答功能;3、点赞功能;4、用户管理功能;围绕上面的 4 大功能,开发方面就涉及到:1、开发语言的选择;2、框架的选择;3、数据库的设计;4、接口开发;5、部署;……今天就给大家带来一门开发「仿 StackOverflow 问答网站」的课程,包含具体开发思路、过程详解、代码等。项目使用了 Python 的 Flask Web 框架,带你实现属于自己的“问答网站”,实现提问、回答、评论、点赞等完备功能,并有完整源码可供下载。效果显示网站首页问题详情页课程地址:https://www.shiyanlou.com/courses/1617下面是课程的第一节内容:欢迎来到 Flask 的世界Flask 是一个使用 Python 开发的微型开发框架,基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。Flask 也被称为 “microframework” ,因为它具有极简的核心,然而却可以通过扩展的方式增加其它功能。Flask 默认不支持数据库连接,不支持用户登录认证等功能。但是,我们可以通过各种扩展获得对这些功能的支持,比如数据库 ORM、表单验证、文件上传、开放式身份验证技术。这使得 Flask 成为具有高度扩展性和灵活性的 Python Web 框架。为什么要学习 Flask ?正如上面所说, Flask 是一个 Web “微”框架,我们使用 Flask 可以快速的搭建网站。在互联网时代,一个好的 idea 不能尽快展现在人们的面前,确实是令开发者很苦恼的事情。容易学习。学完了 Python 基础之后想要接触 Web 开发,Flask 非常易于学习。同时,稍后你能看到示例代码所展示的那样,这是一个十分简单的框架。你的大脑很自然地就适应它了。使用 Flask ,可以更快地开发。Flask 有非常活跃、生机勃勃的社区:很多人会推荐你从 Flask 入手, Flask 是最好的现代 web 开发的 Python 框架之一。“微” 是什么意思?“微” 并不代表整个应用只能塞在一个 Python 文件内,尽管塞在单一文件内也是小事一桩。“微”也不代表 Flask 功能不强。微框架中的“微”字表示 Flask 的目标是保持核心简单但是可扩展。Flask 不会替你做决定,比如选用何种数据库。类似的决定,如使用何种模板引擎,是非常容易改变的。Flask 可以变成你任何想要的东西,不会变成任何你不想要的东西,一切由你做主。缺省情况下, Flask 不包含数据库抽象层、表单验证或者其他已有的库可以处理的东西。然而, Flask 通过扩展为你的应用支持这些功能,就如同这些功能是 Flask 原生的一样。有无数的扩展可以支持数据库整合、表单验证、上传处理和各种开放验证等等。Flask 可能是“微小”的,但绝不简单,可以满足各种生产需要。环境准备在本训练营所提供的实验环境中,已经安装了 Python3.5 以及包管理工具 pip 。首先打开终端,执行如下语句切换到 /home/shiyanlou/Code 目录下,升级 pip3 到最新版:$ cd ~/Code
$ sudo pip3 install -U pip操作截图如下:使用 virtualenv 创建虚拟环境目前 Python 中创建隔离开发环境的工具有多种选择,其中 virtualenv 是最优秀的一个。所谓隔离是指 virtualenv 为每个 Python 项目创建虚拟环境,并保证该程序只能访问该虚拟环境下的包,解决了“项目 A 依赖于版本 1.x ,而项目 B 需要版本 2.x ”的两难问题,从而保持全局 Python 环境的干净整洁。另外使用 virtualenv 还有个好处,那就是在安装 Python 第三方库的时候不需要管理员权限。安装 virtualenv安装 virtualenv 的途径有很多,因为实验环境中已经安装了 pip 包管理工具,所以使用如下命令即可安装,这也是最常用的方式:# 此命令无需在实验环境中执行
$ sudo pip3 install virtualenv而我们的实验环境中已经安装了 virtualenv ,需要执行如下命令升级它到最新版:$ sudo pip3 install -U virtualenv其中 -U 选项等同于 –upgrade ,采用简写的选项可以少敲几下键盘。补充:想了解更多关于 virtualenv 的信息可以参考 Python 指南——虚拟环境。注意最新的版本是 20.x.x ,其中 20 是指当前年份的后两位。2020 年的版本号是 20.x.x ,2021 年的版本号是 21.x.x 。使用 virtualenv接下来可以为我们的 Web 项目创建虚拟环境了,命令很简单:$ virtualenv -p python3 venv其中 -p python 意为基于实验环境中的 Python3.5 创建虚拟环境,新建环境中的默认 Python 解释器就是 Python3.5 ;最后一个参数 venv 表示虚拟环境的目录名,虚拟环境创建后会自动在当前目录下生成一个环境目录,目录的名字就是 venv 。操作截图如下:此时执行如下命令即可进入虚拟环境:$ source venv/bin/activate进入虚拟环境后,可以直接使用 python 命令,它指向 Python3.5 ;可以直接使用pip 命令,它指向虚拟环境的包管理工具。如下图所示,进入虚拟环境后,在命令行提示符前面会有白颜色的括号,括号内是虚拟环境的目录名:现在可以安装我们的 Web 项目所需要的 Flask 工具包了,注意在虚拟环境中执行 python 和 pip 命令不要加 sudo :$ 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 为静态文件目录,该目录暂未创建。一个最基本的项目本节实验我们使用 Flask Web 框架只写出一个最基本的网站首页,并显示 “Hello World” 字样即可。首先使用 Vim 编辑器打开 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)使用 Flask 框架,短短几行代码写到一个文件里,就可以启动一个 Web 应用了。对代码进行一些简单的说明:第 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 启动应用:点击右侧工具栏中的 “Web 服务” 按钮:浏览器会新建一个标签并访问我们的网站首页:这就是一个最基本的 Web 网站的样式,在后面的实验中我们会基于此深入学习。总结本节实验内容较为简单,主要介绍了 Flask Web 框架的特点,以及实验环境的准备工作。在实验环境中更新 pip 和 virtualenv ,并使用后者创建了虚拟环境。在虚拟环境中编写了一个 Flask Web 应用,并成功启动。下一节实验我们继续深入学习 Flask 的配置、映射类的编写等操作。点击了解更多,学习完整课程内容~


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/44458/