Flask 项目实战|从零开发“StackOverflow”问答网站

news/2024/5/15 22:34:05/文章来源:https://blog.csdn.net/shiyanlou_chenshi/article/details/106231302

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 ?

  1. 正如上面所说, Flask 是一个 Web “微”框架,我们使用 Flask 可以快速的搭建网站。在互联网时代,一个好的 idea 不能尽快展现在人们的面前,确实是令开发者很苦恼的事情。
  2. 容易学习。学完了 Python 基础之后想要接触 Web 开发,Flask 非常易于学习。同时,稍后你能看到示例代码所展示的那样,这是一个十分简单的框架。你的大脑很自然地就适应它了。使用 Flask ,可以更快地开发。
  3. 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

操作截图如下:

Flask 项目实战|从零开发“StackOverflow”问答网站

使用 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 命令,它指向虚拟环境的包管理工具。

如下图所示,进入虚拟环境后,在命令行提示符前面会有白颜色的括号,括号内是虚拟环境的目录名:

Flask 项目实战|从零开发“StackOverflow”问答网站

现在可以安装我们的 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 Flaskapp = 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 的配置、映射类的编写等操作。

点击《Flask 仿 StackOverflow 在线问答网站》,学习完整课程内容~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_706022.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速压测电商网站?

1.背景 在电商及互联网应用时代,用户和流量已成为应用核心竞争力,而随着数字化营销逐渐走进各个领域,线上的秒杀抢购、热点营销等活动也成为企业的必备营销手段,营销带来的大规模流量浪涌对系统来说是个巨大的考验,如何…

IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0 实际解决方案

IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法 IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrlHandler-Integra…

vs2015网站发布时,设置页面合并后程序集的文件版本

如何将web网站的页面合并成一个新的程序集发布,并设定文件版本? 这个问题我也纠结了很久,问了很多大牛,也没有找到解决方案 曾开了一贴,https://bbs.csdn.net/topics/391027644,后来自己解决了,…

使用GitHub构建个人博客网站

想起来之前搭建个人博客网站的总结还没有写,趁着这几天有时间回头来分享一下。本人的个人博客网站采用的是GitHubjekyll,GitHub托管代码,jekyll发行生成静态网页。 1、购买域名 域名是在一个新加坡的域名服务器商DoDaddy(https:…

自学Java比较靠谱的学习Java的视频网站

怎样自学Java,不紧深深苦恼着广大的Java学习者,学习Java的人一般来说有自学和去Java培训机构2个选择,培训机构的好处就是能在短时间内系统地教授你大量知识,至于你能不能接受不管,而且培训机构要缴纳一二万的学费&…

电商网站全链路压测实战

1.背景 在电商及互联网应用时代,用户和流量已成为应用核心竞争力,而随着数字化营销逐渐走进各个领域,线上的秒杀抢购、热点营销等活动也成为企业的必备营销手段,营销带来的大规模流量浪涌对系统来说是个巨大的考验,如…

阿里云MVP课堂:零基础建站,满足你拥有自己网站的心愿

2019独角兽企业重金招聘Python工程师标准>>> 很多人都有一个建站的心,但是由于没有相关的技能,导致最后不了了之。云计算,让一切变得简单起来,零基础也能很快搭建出自己的网站,满足你的心愿。 建站总体来说…

KindEditor 上传漏洞致近百个党政机关网站遭植入

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> 2月21日消息,近日,安恒明鉴网站安全监测平台和应急响应中心监测发现近百起党政机关网站被植入色情广告页面,分析发现被植入色情广告页面的网站都…

反击黑客之对网站攻击者的IP追踪

ip追踪是一件比较难实现的,因为我只有一个ip,而且在没有任何技术支持下对该ip追踪,同时我在公司也没有服务器权限,仅有后台,一般的ip追踪技术分类,反应式ip追踪,主动式的追踪,分享的…

网站安全之nginx的配置创建访问网站密码认证

最近我们Sinesafe在处理nginxphpmysql架构的客户网站安全方面要配置后台的二级密码访问验证处理过程中要用到nginx的配置来完成这个二级密码的设置安全部署。 下面由我来简要说一下在nginx配置服务中,创建访问网站密码认证的方法。 1)需要ngx_http_auth_…

[翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景

Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Core 书籍。原版地址. 是除了官方文档外另一个学习EF Core的不错途径, 书中由浅入深的讲解的EF Core的相关知识。因为没有中文版,所以本人对其进行翻译。 预计每两天…

干货!4个资源满满的网站,带来意想不到的帮助

你是不是还没有好用的网站资源?不用郁闷!今天为大家整理了5个资源满满的网站,每一个都是良心之作。 一.茶杯狐 这个名字是不是听起来就觉得特别文艺呢,其实啊,它是一个海量免费资源的网站呢!里面可包含了电…

搭建IIS并配置网站之旅

配置本地IIS这个过程,很羞愧的说,大概花了一个月之久…… 最开始,有需要用到了IIS,然后就着手配置,然后就遇到了问题,然后当时事很多,这又不是很急,就搁置了…… 在历经了一个月之后…

windows使用nginx实现网站负载均衡测试实例

http://www.jb51.net/article/22470.htm 如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧。做网站负载可以买硬件设备来实现&a…

网站 admin.php,caozha-admin(PHP网站后台管理框架)v1.7.1官方安装版

caozha-admin是一个通用的PHP网站后台管理框架,基于开源的ThinkPHP开发,特点,易上手,零门槛,界面清爽极简,极便于二次开发。功能介绍caozha-admin后台管理框架功能:1、系统设置2、管理员管理3、…

element 修改分页样式_如何给wordpress网站的文章列表,添加分页效果?可以通过2种方式...

在上一章节中,我们为wordpress网站的首页添加了全站文章列表。一个wordpress网站不可能只有几篇文章,可能会有成千上万的文章,作为一个wordpress博客主题模板,一般情况下,不可能让所有的文章在一个页面一下子全部显示出…

jsp项目放入宝塔windows环境_《鸡站群组》-教你建站(1.1) 下载并配置windows宝塔面板...

(Linux请自己参考官网教程哈)欢迎访问 鸡站论坛各位站长们好呀 欢迎来到由鸡站群组独家呈现的建站教程 本教程会围绕各大站长的需求 以各种建站源码的使用以主要内容进行教学“工欲善其事,必先利其器” 作为一位站长 我们需要建站环境对网站进…

php网站404页面302,404页面该怎么做?

建立404页面的方法是:在“.htaccess”文件中加入“ErrorDocument 404/Error.html”代码;然后建立一个简单的html的404页面,并命名为“Error.html”;最后将该“Error.html”文件放置在网站根目录下即可。404页面的目的是&#xff1…

阿呆做网站(3)--建数据库

Just do something!只是玩玩,纯属入门,熟练熟练。这次做个BBS,实现最基本的功能又加了个用户类型表(ForumUserClassTab)用来管理斑竹类型用户类型表(ForumUserClassTab) --|--用户类型ID(UserClassID) |--用户类型名称(U…

海洋工作室——网站建设专家:How to check the SQL statement execute time on SQL Server ?...

Check this,setstatisticsprofile onsetstatisticsio onsetstatisticstime ongo<Your SQL Statement goes here>gosetstatisticsprofile offsetstatisticsio offsetstatisticstime off转载于:https://www.cnblogs.com/OceanChen/archive/2009/10/12/1581791.html