一、概述

forum是一个简单的web.py论坛,后端采用Python+web.py+MySQL,前端采用HTML+CSS+JavaScript+jQuery+RequireJS。

该论坛的主要功能包括:

  • 注册、登录、密码找回
  • 头像/签名/邮箱/密码修改
  • 游客自由看贴、文章列表分页显示
  • 登录后发帖、作者才能删贴(所有对该贴的评论也会被删除)
  • 登录后无刷新回帖(包括引用回帖,即对回复的回复)

forum代码的GitHub主页:https://github.com/RussellLuo/forum

二、代码结构

forum是一个典型的Web应用,代码结构总体分为后端(back-end,简写为be)和前端(front-end,简写为fe)两部分。

后端部分又可以分为URL路由处理(简写为url,这部分代码与web.py框架强相关)、数据库读写(简写为db,即与MySQL的交互)和HTML模板(简写为html),而前端部分则主要分为JavaScript(简写为js)和CSS。其实这种划分也不是十分严格的,例如用于生成动态页面的HTML模板,就夹杂了后端的web.py模板技术和前端的HTML语法。

以下为forum程序的目录结构,注释的抬头表明了该文件的所属分类:

forum/
forum.py                             (be_url: 后台主程序,URL路由入口)
model.py                             (be_db: 访问users、posts、comments表)
README.md
schema.sql                            (be_db: 用于创建MySQL数据库和表的SQL语句)
settings.py                           (be_url: 一些网站级别的全局配置)
static/
css/
style.css                     (fe_css: 定义了页面元素的样式)
img/
user_normal.jpg
boy.gif
girl.gif
js/
app/                          (fe_js: 自主开发代码)
comment.js                (fe_js: 专用模块,用于动态处理view.html中的回帖操作)
common.js                 (fe_js: 通用模块,定义了一些公用的变量或函数)
login.js                  (fe_js: 专用模块,用于动态处理login.html页面)
new_post.js               (fe_js: 专用模块,用于动态处理add.html页面)
password.js               (fe_js: 专用模块,用于动态处理password.html页面)
profile.js                (fe_js: 专用模块,用于动态处理master_profile.html页面)
register.js               (fe_js: 专用模块,用于动态处理register.html页面)
setting.js                (fe_js: 专用模块,用于动态处理account_settings.html页面)
validator.js              (fe_js: 通用模块,用于表单输入的合法性验证)
lib/ (fe_js: 第三方库)
jquery-1.10.1.min.js      (fe_js: jQuery库)
require.min.js            (fe_js: RequireJS库,用于JavaScript/jQuery代码的模块化)
main.js                       (fe_js: JavaScript代码入口,主模块)
templates/
about.html                        (be_html: “关于”页面)
account_settings.html             (be_html: “设置”页面)
failed.html                       (be_html: 操作失败时的页面)
list.html                         (be_html: 所有帖子的列表,也是论坛主页)
master_profile.html               (be_html: 用户登录后的个人信息页面)
register.html                     (be_html: “注册”页面)
view.html                         (be_html: 看贴/回帖的页面)
account_posts.html                (be_html: “文章”页面)
add.html                          (be_html: “发帖”页面)
layout.html                       (be_html: 网站页面布局)
login.html                        (be_html: “登录”页面)
password.html                     (be_html: “找回密码”页面)
user_profile.html                 (be_html: 用户未登录时的个人信息页面,或者其他用户的信息页面)
util.py                               (be_url: 定义了一些辅助函数)

三、运行

1、相关依赖

  • Python(建议2.6以上,更低版本没有试过)
  • web.py(0.37版本)
  • MySQLdb
  • markdown

2、获取代码

$ git clone https://github.com/RussellLuo/forum.git
$ cd forum

3、初始配置

a)MySQL账户配置

修改settings.py中的“MySQL配置”:

# 本地环境下的MySQL配置
MYSQL_USERNAME = 'your_mysql_username' # 修改为你本地的MySQL用户名
MYSQL_PASSWORD = 'your_mysql_password' # 修改为你本地的MySQL密码

b)创建数据库

$ mysql -u[mysql_username] -p
Enter Password: [mysql_password]
...
mysql> source schema.sql;

c)邮件服务器配置

登录页面中的“找回密码”功能是指:发送包含临时密码的邮件给用户,因此需要用到邮件服务器。

修改settings.py中的“email服务器配置”:

##### email服务器配置 #####
import web
web.config.smtp_server = 'smtp.gmail.com'
web.config.smtp_port = 587
web.config.smtp_username = 'your_gmail_address' # 修改为你的gmail邮箱地址
web.config.smtp_password = 'your_gmail_password' # 修改为你的gmail邮箱密码
web.config.smtp_starttls = True

如果要使用gmail之外的其他邮件服务器,那上面列出的所有配置都要改,具体数据视情况而定。

4、开始体验

$ python forum.py

在浏览器中访问 http://0.0.0.0:8080/ 即可。

最后,要特别感谢frankfu,他基于web.py的论坛源码给了我很大的启发,forum还借鉴了其中的代码结构和分页显示功能。

一个简单的web.py论坛的更多相关文章

  1. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. django创建一个简单的web站点

    一.新建project 使用Pycharm,File->New Project…,选择Django,给project命名 (project不能用test命名)   新建的project目录如下: ...

  3. Docker容器技术-创建一个简单的Web应用

    一.创建一个简单的Web应用 1.identicon 基于某个值而自动产生的图像,这个值是IP地址或用户名的散列值. 用途: 通过计算用户名或IP地址的散列值,在网站上提供用于识别用户的图像,以及自动 ...

  4. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  5. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  6. 一个简单的web服务器

    写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...

  7. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  8. Node.js简单介绍并实现一个简单的Web MVC框架

    编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...

  9. IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程

    一.部署Tomcat 二.创建一个简单的Web工程 2.1创建一个新工程 创建一个新工程 设置JDK及选择Web Application (创建的是Web工程) 点击Next,选择工作空间,起个工程名 ...

随机推荐

  1. 201621123001 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 通过IP地址和端口号可以进行建立Socket对象,然后进行通信 使用Socket的一般步骤: 建立Sock ...

  2. js重写trim()方法

    最近项目中出现去空格的需求,我本地是IE11,使用trim()函数的时候,是无法识别的.因此重写String的trim()方法. 1.要求 可以去除首位全角,半角空格. 2.对   能去除所有 Str ...

  3. ios 汽车品牌展示案例

    汽车组模型 // ZQRGroup.h #import <Foundation/Foundation.h> @interface ZQRGroup : NSObject /** *组标题 ...

  4. Could not load driverClass com.mysql.jdbc.Driver错误

    在整合spring和mybatis的时候,在spring配置文件中已经加载了db.properties并配置了c3p0数据源 但在写了一个测试类测试是否取到了数据库的连接时,报错:Could not ...

  5. Delphi 10.3实现Android App的动态权限申请

    Delphi 10.3 RIO发布近两个月,针对Google Play的要求,完美实现了对Android 8的支持,即对Android API Level 26的支持.这支持当中,最主要的得算是动态申 ...

  6. 内存直读技术DMA

    DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...

  7. Access denied for user 'root'@'IP' (using password:YES)解决方法

    在MySql的使用过程中,碰到“Access denied for user 'root'@'IP' (using password:YES)”的问题,使用以下语句修改后还是不行. GRANT ALL ...

  8. gl_PointSize偶数像素表现精准,基数会模糊化。

  9. printf 汇总

    //u32为unsigned long u32 g_u32FiveSecondCount = 0; mysprintf(TempBuf, "\r\n%ld Uart console.&quo ...

  10. ORA-03001,GATHER_TABLE_STATS数据库自动收集统计信息报错

    1.根据Alert报错信息,查询Trace日志 /oracle/app/oracle/admin/fgsquery/bdump/fgsquery_j001_11111.trc Oracle Datab ...