当前位置: 首页 > news >正文

Python使用Flask构建简单的web应用

构建一个简单的 Flask Web 应用程序是学习 Python Web 开发的良好起点。Flask 是一个轻量级的 WSGI Web 应用框架,它的主要目标是让开发者更容易构建 Web 应用,同时保持简单性和灵活性。下面我们将详细介绍如何使用 Flask 构建一个简单的 Web 应用,包括创建项目、定义路由、处理请求、渲染模板和使用表单等方面。

环境准备

在开始之前,请确保你已经安装了 Python 和 pip。如果还没有安装,可以从 Python 官网 下载并安装最新版本的 Python。安装完毕后,可以使用以下命令来安装 Flask:

 

pip install Flask

创建项目结构

首先,我们创建一个项目目录来存放我们的 Flask 应用。在命令行中执行以下命令:

mkdir flask_app cd flask_app

在这个目录中,我们创建一个名为 app.py 的文件,这将是我们的主应用文件。项目的基本结构如下:

 

flask_app/ app.py templates/ index.html

编写 Flask 应用

app.py 文件中,我们将编写我们的 Flask 应用的主要代码。以下是一个简单的示例:

from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/hello/<name>') def hello(name): return f'Hello, {name}!' @app.route('/greet', methods=['GET', 'POST']) def greet(): if request.method == 'POST': name = request.form['name'] return redirect(url_for('hello', name=name)) return render_template('greet.html') if __name__ == '__main__': app.run(debug=True)

创建模板

templates 目录中,我们创建两个 HTML 模板文件:index.htmlgreet.html

index.html

这是我们的首页模板:

 

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home Page</title> </head> <body> <h1>Welcome to the Flask App!</h1> <p><a href="{{ url_for('greet') }}">Greet Someone</a></p> </body> </html>

greet.html

这是一个包含表单的模板,用于输入名字:

 

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Greet</title> </head> <body> <h1>Greet Someone</h1> <form method="POST"> <label for="name">Enter your name:</label> <input type="text" id="name" name="name" required> <button type="submit">Submit</button> </form> </body> </html>

运行应用

确保所有文件保存完毕后,在命令行中运行以下命令来启动 Flask 应用:

 

python app.py

打开浏览器,访问 http://127.0.0.1:5000/,你应该能看到我们的首页。点击“Greet Someone”链接,会跳转到输入名字的表单页面。输入名字并提交后,会重定向到一个显示问候信息的页面。

扩展功能

我们可以在此基础上添加更多功能,例如用户登录、数据库连接等。

用户登录示例

首先,我们需要一个用于存储用户信息的地方。为了简单起见,我们使用 Python 字典来模拟数据库。更新 app.py 如下:

 

python

複製程式碼

from flask import Flask, render_template, request, redirect, url_for, session, flash from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.secret_key = 'supersecretkey' # Mock database users = {} @app.route('/') def index(): return render_template('index.html') @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if username in users: flash('Username already exists!', 'error') else: users[username] = generate_password_hash(password) flash('Registration successful!', 'success') 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_password_hash = users.get(username) if user_password_hash and check_password_hash(user_password_hash, password): session['username'] = username flash('Login successful!', 'success') return redirect(url_for('profile')) else: flash('Invalid credentials!', 'error') return render_template('login.html') @app.route('/profile') def profile(): if 'username' in session: return f'Hello, {session["username"]}!' return redirect(url_for('login')) @app.route('/logout') def logout(): session.pop('username', None) flash('You have been logged out.', 'info') return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True)

创建新的模板

我们需要为注册和登录页面创建新的模板文件。

register.html
 

html

複製程式碼

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Register</title> </head> <body> <h1>Register</h1> <form method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <button type="submit">Register</button> </form> <p><a href="{{ url_for('login') }}">Already have an account? Login here.</a></p> </body> </html>

login.html
 

html

複製程式碼

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> </head> <body> <h1>Login</h1> <form method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <button type="submit">Login</button> </form> <p><a href="{{ url_for('register') }}">Don't have an account? Register here.</a></p> </body> </html>

总结

通过上述步骤,我们构建了一个简单但功能全面的 Flask Web 应用。这个应用包括了基本的路由、模板渲染、表单处理以及简单的用户认证功能。Flask 的灵活性使其非常适合快速开发和原型设计,同时也能够扩展以应对更复杂的需求。通过这个示例,你可以继续学习和探索 Flask 的更多高级功能,如数据库集成、蓝图、API 开发等。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 二叉树—leetcode
  • 发现 Laravel 中的 api 响应时间明显过长
  • Aptos Builder Jam 亚洲首站|见证 Aptos 公链 2024 年新突破
  • JAVA面试八股文----Mybatis
  • CSAPP Lab01——Data Lab完成思路
  • Git配置 安装及使用
  • 高通Android 12/13添加/移除不被清理后台应用
  • web学习笔记(六十四)
  • 04 架构核心技术之分布式消息队列
  • 深度学习复盘与论文复现C
  • [数据集][图像分类]人种黄种人白人黑人分类数据集970张4类别
  • C++ MPI多进程并发
  • 使用CodeGen进行程序综合推理
  • 定位器追踪器怎么连接手机
  • OPenCV的重要结构体Mat
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Bytom交易说明(账户管理模式)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • echarts的各种常用效果展示
  • mysql_config not found
  • mysql常用命令汇总
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Spring Boot快速入门(一):Hello Spring Boot
  • 程序员最讨厌的9句话,你可有补充?
  • 大快搜索数据爬虫技术实例安装教学篇
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 力扣(LeetCode)357
  • 如何编写一个可升级的智能合约
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 运行时添加log4j2的appender
  • 智能网联汽车信息安全
  • UI设计初学者应该如何入门?
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # Apache SeaTunnel 究竟是什么?
  • #在 README.md 中生成项目目录结构
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)选择元素——(17)练习(Exercises)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (SERIES10)DM逻辑备份还原
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)h264中avc和flv数据的解析
  • (转)平衡树
  • (总结)(2)编译ORB_SLAM2遇到的错误
  • .net 调用php,php 调用.net com组件 --
  • .net和php怎么连接,php和apache之间如何连接
  • .NET企业级应用架构设计系列之开场白
  • .NET使用存储过程实现对数据库的增删改查
  • @FeignClient注解,fallback和fallbackFactory
  • [《百万宝贝》观后]To be or not to be?
  • [20180224]expdp query 写法问题.txt