用Python构建高效在线投票系统

admin 2025-01-13 807 0

在这个数字化时代,在线投票系统已经成为各类组织和活动不可或缺的工具。无论是企业内部的决策,还是社区活动的选举,一个高效、安全的在线投票系统都能极大地提升效率和公平性。本文将带你一步步用Python语言构建一个简易但功能完备的在线投票系统。

用Python构建高效在线投票系统

项目准备

首先,我们需要明确项目的需求和技术栈。我们的在线投票系统需要具备以下基本功能:

  1. 用户注册与登录
  2. 创建和管理投票
  3. 用户参与投票
  4. 实时显示投票结果

技术栈选择:

  • 后端: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)