一、概述
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還借鑒了其中的代碼結構和分頁顯示功能。