Python打造社区信息公告系统
在这个信息爆炸的时代,社区信息的及时传递显得尤为重要。为了让居民们能够快速获取社区内的最新动态,我们决定用Python语言开发一个社区信息公告系统。本文将详细介绍该系统的设计与实现过程。

系统需求分析
首先,我们需要明确系统的基本功能:
- 信息发布:管理员可以发布新的公告信息。
- 信息浏览:居民可以查看所有发布的公告。
- 信息搜索:居民可以通过关键词搜索相关公告。
- 用户管理:管理员可以添加、删除和修改用户信息。
技术选型
为了简化开发,我们选择以下技术栈:
- 后端:Python + Flask框架
- 数据库:SQLite
- 前端:HTML + CSS + JavaScript
系统设计
数据库设计
我们使用SQLite数据库来存储公告和用户信息。主要包含两个表:
-
公告表(announcements)
- id(主键)
- title(标题)
- content(内容)
- created_at(发布时间)
-
用户表(users)
- id(主键)
- username(用户名)
- password(密码)
- is_admin(是否为管理员)
后端设计
使用Flask框架搭建后端服务,主要包含以下接口:
- 发布公告:
/api/announce(POST) - 获取公告列表:
/api/announcements(GET) - 搜索公告:
/api/search(GET) - 用户登录:
/api/login(POST) - 用户管理:
/api/users(GET, POST, DELETE)
前端设计
前端页面主要包括:
- 登录页面:用户登录
- 公告列表页面:展示所有公告
- 发布公告页面:管理员发布新公告
- 用户管理页面:管理员管理用户
代码实现
后端代码
首先,安装Flask和SQLite库:
pip install Flask sqlite3
然后,编写后端代码:
from flask import Flask, request, jsonify
import sqlite3
app = Flask(__name__)
def init_db():
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS announcements
(id INTEGER PRIMARY KEY, title TEXT, content TEXT, created_at TEXT)''')
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, username TEXT, password TEXT, is_admin BOOLEAN)''')
conn.commit()
conn.close()
@app.route('/api/announce', methods=['POST'])
def announce():
data = request.json
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("INSERT INTO announcements (title, content, created_at) VALUES (?, ?, datetime('now'))",
(data['title'], data['content']))
conn.commit()
conn.close()
return jsonify({'status': 'success'})
@app.route('/api/announcements', methods=['GET'])
def get_announcements():
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("SELECT * FROM announcements")
announcements = c.fetchall()
conn.close()
return jsonify(announcements)
@app.route('/api/search', methods=['GET'])
def search():
query = request.args.get('query')
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("SELECT * FROM announcements WHERE title LIKE ? OR content LIKE ?", ('%' + query + '%', '%' + query + '%'))
results = c.fetchall()
conn.close()
return jsonify(results)
@app.route('/api/login', methods=['POST'])
def login():
data = request.json
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=? AND password=?", (data['username'], data['password']))
user = c.fetchone()
conn.close()
if user:
return jsonify({'status': 'success', 'is_admin': user[3]})
else:
return jsonify({'status': 'failed'})
@app.route('/api/users', methods=['GET', 'POST', 'DELETE'])
def manage_users():
if request.method == 'GET':
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("SELECT * FROM users")
users = c.fetchall()
conn.close()
return jsonify(users)
elif request.method == 'POST':
data = request.json
conn = sqlite3.connect('community.db')
c = conn.cursor()
c.execute("INSERT INTO users (username, password, is_admin) VALUES (?,
« 上一篇
Python打造梦幻在线游戏商店
下一篇 »
构建心灵港湾:用Python打造在线心理咨询平台