在这个数字化时代,在线投票系统已经成为各类组织和活动不可或缺的工具。无论是企业内部的决策,还是社区活动的选举,一个高效、安全的在线投票系统都能极大地提升效率和公平性。本文将带你一步步用Python语言构建一个简易但功能完备的在线投票系统。
项目准备
首先,我们需要明确项目的需求和技术栈。我们的在线投票系统需要具备以下基本功能:
- 用户注册与登录
- 创建和管理投票
- 用户参与投票
- 实时显示投票结果
技术栈选择:
- 后端:Python + Flask框架
- 数据库:SQLite
- 前端:HTML + CSS + JavaScript
环境搭建
在开始编码之前,确保你已经安装了Python和pip。接下来,安装Flask和SQLite库:
pip install Flask
pip install flask_sqlalchemy
后端开发
1. 初始化项目
创建一个新的文件夹online_voting_system
,并在其中创建以下文件结构:
online_voting_system/
│
├── app.py
├── models.py
├── templates/
│ ├── index.html
│ ├── login.html
│ ├── register.html
│ └── vote.html
└── static/
└── style.css
2. 定义数据库模型
在models.py
中定义用户和投票的数据库模型:
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///voting.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(80), nullable=False)
class Vote(db.Model):
id = db.Column(db.Integer, primary_key=True)
question = db.Column(db.String(200), nullable=False)
options = db.Column(db.PickleType, nullable=False)
results = db.Column(db.PickleType, default={})
db.create_all()
3. 实现用户注册与登录
在app.py
中实现用户注册与登录的逻辑:
from flask import Flask, render_template, request, redirect, url_for, session
from models import db, User
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///voting.db'
db.init_app(app)
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
new_user = User(username=username, password=password)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('login'))
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username, password=password).first()
if user:
session['user_id'] = user.id
return redirect(url_for('index'))
return render_template('login.html')
@app.route('/')
def index():
if 'user_id' not in session:
return redirect(url_for('login'))
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
4. 创建和管理投票
在app.py
中添加创建和管理投票的功能:
from models import Vote
@app.route('/create_vote', methods=['GET', 'POST'])
def create_vote():
if request.method == 'POST':
question = request.form['question']
options = request.form.getlist('options')
new_vote = Vote(question=question, options=options, results={option: 0 for option in options})
db.session.add(new_vote)
db.session.commit()
return redirect(url_for('index'))
return render_template('create_vote.html')
@app.route('/vote/<int:vote_id>', methods=['GET', 'POST'])
def vote(vote_id):
vote = Vote.query.get(vote_id)
if request.method == 'POST':
selected_option = request.form['option']
vote.results[selected_option] += 1
db.session.commit()
return redirect(url_for('results', vote_id=vote_id))
return render_template('vote.html', vote=vote)
@app.route('/results/<int:vote_id>')
def results(vote_id):
vote = Vote.query.get(vote_id)
return render_template('results.html', vote=vote)
评论(0)