首页 > 其他分享 >Flask入门:打造简易投票系统

Flask入门:打造简易投票系统

时间:2024-12-16 13:57:02浏览次数:5  
标签:__ 投票系统 votes 入门 index Flask app 投票

目录

准备工作

创建项目结构

编写HTML模板

编写Flask应用

代码解读

进一步优化

结语


Flask,这个轻量级的Python Web框架,因其简洁和易用性,成为很多开发者入门Web开发的首选。今天,我们就用Flask来做一个简单的投票系统,让你快速上手Web开发,同时理解Flask的核心概念。

准备工作

在开始之前,你需要确保已经安装了Python和pip。然后,你可以通过pip安装Flask:

pip install Flask

创建项目结构

为了保持项目的整洁和可维护性,我们先创建一个基本的项目结构:

/voting_app
    /templates
        index.html
    app.py

templates文件夹用于存放HTML模板。
app.py是我们的Flask应用代码。

编写HTML模板

首先,我们来编写一个简单的HTML模板,用于展示投票页面和结果。在templates文件夹中创建index.html文件,并添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>投票系统</title>
</head>
<body>
    <h1>投票系统</h1>
    <form action="/vote" method="post">
        <input type="radio" name="choice" value="猫"> 猫<br>
        <input type="radio" name="choice" value="狗"> 狗<br>
        <input type="radio" name="choice" value="兔子"> 兔子<br>
        <input type="submit" value="投票">
    </form>
 
    {% if votes %}
    <h2>投票结果</h2>
    <ul>
        {% for choice, count in votes.items() %}
        <li>{{ choice }}: {{ count }}</li>
        {% endfor %}
    </ul>
    {% endif %}
</body>
</html>

这个模板包含一个简单的表单,用于选择投票选项,并显示投票结果。

编写Flask应用

接下来,我们在app.py中编写Flask应用代码:

from flask import Flask, request, render_template, redirect, url_for
 
app = Flask(__name__)
 
# 存储投票结果的字典
votes = {
    '猫': 0,
    '狗': 0,
    '兔子': 0
}
 
@app.route('/')
def index():
    """显示投票页面和结果"""
    return render_template('index.html', votes=votes)
 
@app.route('/vote', methods=['POST'])
def vote():
    """处理投票请求"""
    choice = request.form.get('choice')
    if choice in votes:
        votes[choice] += 1
    return redirect(url_for('index'))
 
if __name__ == '__main__':
    app.run(debug=True)

代码解读

导入Flask和其他模块:

from flask import Flask, request, render_template, redirect, url_for

我们导入了Flask框架中需要用到的模块,包括Flask类本身、处理请求的request模块、渲染模板的render_template函数、重定向的redirect函数和生成URL的url_for函数。

创建Flask应用实例:

app = Flask(__name__)

这里我们创建了一个Flask应用实例,并传入__name__变量作为参数。这个变量表示当前模块的名称,Flask使用它来定位模板和静态文件的目录。

定义全局变量:

votes = {
    '猫': 0,
    '狗': 0,
    '兔子': 0
}

我们定义了一个全局字典votes,用于存储每个选项的投票数。

定义路由和视图函数:

@app.route('/')
def index():
    """显示投票页面和结果"""
    return render_template('index.html', votes=votes)

这里我们定义了一个路由/,当用户访问这个URL时,会调用index视图函数。这个函数使用render_template函数渲染index.html模板,并将votes字典传递给模板。

@app.route('/vote', methods=['POST'])
def vote():
    """处理投票请求"""
    choice = request.form.get('choice')
    if choice in votes:
        votes[choice] += 1
    return redirect(url_for('index'))

这里我们定义了另一个路由/vote,并指定它只接受POST请求。当用户提交投票表单时,会调用vote视图函数。这个函数从request.form中获取用户选择的选项,并更新votes字典中的投票数。然后,使用redirect函数重定向到index视图函数,显示更新后的投票结果。

运行Flask应用:

if __name__ == '__main__':
    app.run(debug=True)

最后,我们检查当前脚本是否是主脚本(即直接运行而不是被导入到其他脚本中)。如果是主脚本,则调用app.run()方法来启动Flask应用。debug=True参数表示开启调试模式,这样我们可以实时看到代码修改后的效果,并且当代码出现错误时,会显示详细的错误信息。

运行应用

现在,你可以在终端中运行app.py文件来启动Flask应用:

python app.py

然后,在浏览器中打开http://127.0.0.1:5000/,你将看到投票系统的页面。选择一个选项并提交表单,你将看到投票结果实时更新。

进一步优化

虽然这个简单的投票系统已经可以正常工作了,但我们还可以对它进行一些优化,使其更加健壮和可扩展。

持久化存储:

目前,投票结果是存储在全局变量votes中的,这意味着当应用重启时,投票结果会丢失。为了解决这个问题,我们可以将投票结果存储到数据库或文件中。

表单验证:

在vote视图函数中,我们直接从request.form中获取用户选择的选项,并没有进行任何验证。在实际应用中,我们应该对用户输入进行验证,以确保数据的合法性和安全性。

错误处理:

目前,当遇到错误时(如数据库连接失败、文件读写错误等),应用可能会崩溃或显示不友好的错误信息。为了提升用户体验和应用的稳定性,我们应该添加适当的错误处理机制。

模板优化:

目前的HTML模板比较简单,只包含基本的投票功能和结果显示。在实际应用中,我们可以使用CSS和JavaScript来美化页面和增强交互性。

用户认证:

为了防止恶意投票(如重复投票、刷票等),我们可以添加用户认证机制。只有经过认证的用户才能参与投票。

部署到生产环境:

当应用开发完成后,我们需要将其部署到生产环境中。这通常涉及到配置Web服务器(如Gunicorn、uWSGI等)、数据库服务器(如MySQL、PostgreSQL等)和反向代理(如Nginx、Apache等)。同时,我们还需要考虑应用的性能优化、安全性(如HTTPS、防火墙等)和可维护性(如日志记录、监控等)。

结语

通过这个简单的投票系统示例,我们了解了Flask框架的基本概念和用法。Flask的简洁和易用性使得它成为入门Web开发的理想选择。当然,Web开发是一个复杂而广阔的领域,涉及到前端、后端、数据库、安全性等多个方面。希望这个示例能够激发你对Web开发的兴趣,并为你后续的学习和实践打下坚实的基础。

标签:__,投票系统,votes,入门,index,Flask,app,投票
From: https://blog.csdn.net/weixin_43856625/article/details/144506711

相关文章

  • 嵌入式从入门到入土:Linux(5)
    嵌入式从入门到入土:Linux(5)主要内容网络相关指令进程相关指令磁盘相关指令挂载与卸载Linux共享环境搭建虚拟机网络模式桥接模式和windows共享一个网段,并且能够与windows系统一样可以连接到互联网说明:虚拟机类似于一台电脑连接到了路由器好处:网络稍微会快一点坏处:占......
  • Envoy 进阶指南(上):从入门到核心功能全掌握
    文章目录1.Envoy入门1.1什么是Envoy1.2Envoy的核心功能1.3Envoy术语1.4设计目标1.5Sidecar模式2.初识Envoy2.1安装Envoy2.2简单示例了解Envoy2.3管理视图1.Envoy入门1.1什么是EnvoyEnvoy是一款CNCF旗下的开源项目,由Lyft开源。Envoy采用C++实现,......
  • HarmonyOS Next 入门实战 - 文字转拼音,文字转语音
    文字转拼音安装pinyin4js三方库ohpminstall@ohos/pinyin4jspinyin4js提供了以下接口:●文字转拼音(带声调和不带声调)●文字转拼音首字母●简体繁体互转letrawText="风急天高猿萧哀,渚清沙白鸟飞回;"letpinyin1:string=pinyin4js.convertToPinyinString(rawT......
  • 2024年最新最全网络安全护网行动指南【附零基础入门教程】_网络安全靶场整个业务指南
    前言随着《网络安全法》和《等级保护制度条例2.0》的颁布,国内企业的网络安全建设需与时俱进,要更加注重业务场景的安全性并合理部署网络安全硬件产品,严防死守“网络安全”底线。“HW行动”大幕开启,国联易安誓为政府、企事业单位网络安全护航!,网络安全形势变得尤为复杂严峻。......
  • CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!
    目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15天)4.3、后期五、CTF学......
  • 毕业设计:NBA球员数据分析及预测系统+可视化 +Flask框架 篮球数据分析 时间序列预测算
    毕业设计:NBA球员数据分析及预测系统+可视化+Flask框架篮球数据分析时间序列预测算法大数据毕业设计✅1、项目介绍NBA球员数据分析及预测系统技术栈Python语言、Flask框架、requests爬虫、statsmodels中的ARIMA时间序列预测算法、Echarts可视化2、项目界面(1)球员数......
  • 毕业设计:python哔哩哔哩数据可视化分析系统 B站 bilibili数据 Flask框架 Echarts可视
    毕业设计:python哔哩哔哩数据可视化分析系统B站bilibili数据Flask框架Echarts可视化(源码)✅1、项目介绍技术栈:python语言、Flask框架、Echarts可视化、MySQL数据库、词云图、HTML2、项目界面(1)系统首页—数据概况(2)B站评论弹幕分析(3)B站作者分析(4)B站视频可视化分......
  • MyBatis入门
    MyBatis框架-它是一个优秀的持久层框架,用于在Java应用程序中与数据库进行交互。MyBatis主要的优势在于它可以将SQL语句和Java代码分离,使得代码结构更加清晰。开发人员可以在XML配置文件或者通过注解的方式编写SQL语句,MyBatis会根据这些SQL语句来操作数据库。例如,要查询数据库中......
  • Python入门:开发环境搭建(小白教程)
    ......
  • flask毕设新闻资讯类app(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,新闻资讯类APP已成为人们获取新闻信息的重要渠道。现有研究主要以传统新闻媒体的数字化转型和新闻资讯类APP......