Flask轻松上手:从零开始搭建属于你的Web应用

news2024/11/23 12:19:40

目录

一、准备工作

二、安装Flask

三、创建你的第一个Flask应用

创建一个新的Python文件

编写Flask应用代码

运行Flask应用

四、创建一个简单的博客系统

定义路由和文章列表

创建模板文件

运行并测试博客系统

五、使用数据库存储用户信息

安装Flask-SQLAlchemy

修改app.py文件

六、总结与展望


Flask是一个轻量级的Web应用框架,它使用Python编写,以简洁、灵活和易扩展著称。Flask的核心功能包括请求响应处理、模板渲染和URL路由,通过扩展组件,可以轻松实现数据库访问、表单验证和用户身份认证等功能。本文旨在帮助新手从零开始搭建一个简单的Web应用,通过丰富的案例和代码,让你轻松上手Flask。

一、准备工作

在开始之前,你需要确保你的计算机上已经安装了Python。Python是一种广泛使用的编程语言,具有简洁易读、学习曲线平缓等优点。你可以从Python的官方网站下载并安装适合你操作系统的Python版本。

安装完Python后,你还需要一个IDE(集成开发环境)来编写和运行你的Flask应用。PyCharm是一个流行的Python IDE,它提供了丰富的功能和友好的用户界面,非常适合初学者使用。你可以从PyCharm的官方网站下载并安装社区版。

二、安装Flask

安装Flask非常简单,你可以使用pip命令来安装。打开你的命令行工具(Windows用户使用cmd或PowerShell,Mac/Linux用户使用Terminal),输入以下命令:
pip install flask
这条命令会自动下载并安装最新版本的Flask及其依赖库。

三、创建你的第一个Flask应用

创建一个新的Python文件

在你的IDE中,创建一个新的Python文件,命名为app.py。

编写Flask应用代码

在app.py文件中,编写以下代码:

from flask import Flask  
  
app = Flask(__name__)  
  
@app.route('/')  
def hello_world():  
    return 'Hello, World!'  
  
if __name__ == '__main__':  
    app.run(debug=True)

这段代码创建了一个Flask应用,并定义了一个路由/,当用户访问这个路由时,会返回一个简单的字符串'Hello, World!'。

运行Flask应用

保存app.py文件后,在命令行中切换到该文件所在的目录,并运行以下命令:
python app.py
此时,你的Flask应用会启动一个本地Web服务器,并在默认端口5000上监听请求。你可以打开浏览器,访问http://127.0.0.1:5000/,你会看到一个页面显示'Hello, World!'。

四、创建一个简单的博客系统

接下来,我们将扩展我们的Flask应用,创建一个简单的博客系统,让用户可以查看最新的文章列表。

定义路由和文章列表

在app.py文件中,添加以下代码:

from flask import Flask, render_template  
  
app = Flask(__name__)  
  
articles = [  
    {'title': 'First Post', 'content': 'This is the content of the first post.'},  
    {'title': 'Second Post', 'content': 'Here is another article.'}  
]  
  
@app.route('/')  
def home():  
    return render_template('home.html', articles=articles)  
  
if __name__ == '__main__':  
    app.run(debug=True)

这段代码定义了一个路由/来处理主页请求,并创建了一个模拟的文章列表。我们使用Flask内置的模板引擎来渲染HTML页面,让网页看起来更美观。

创建模板文件

在你的项目目录中,创建一个名为templates的文件夹,并在其中创建一个名为home.html的文件。在home.html文件中,编写以下代码:

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Blog</title>  
</head>  
<body>  
    <h1>My Blog</h1>  
    <ul>  
        {% for article in articles %}  
            <li>  
                <h2>{{ article.title }}</h2>  
                <p>{{ article.content }}</p>  
            </li>  
        {% endfor %}  
    </ul>  
</body>  
</html>

这段代码使用Jinja2模板引擎的语法来渲染文章列表。当你访问主页时,Flask会将articles变量传递给模板,并在页面上显示每篇文章的标题和内容。

运行并测试博客系统

保存所有文件后,重新运行你的Flask应用。打开浏览器,访问http://127.0.0.1:5000/,你会看到一个页面显示你的博客文章列表。

五、使用数据库存储用户信息

随着你的应用变得更加复杂,你可能需要处理数据库连接、用户认证等功能。接下来,我们将展示如何使用SQLite数据库存储用户信息,并使用Flask-SQLAlchemy插件来简化数据库操作。

安装Flask-SQLAlchemy

在命令行中,运行以下命令来安装Flask-SQLAlchemy:
pip install flask-sqlalchemy

修改app.py文件

在app.py文件中,添加以下代码来配置数据库连接,并创建一个用户模型:

from flask import Flask, request, redirect, url_for  
from flask_sqlalchemy import SQLAlchemy  
  
app = Flask(__name__)  
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.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(120), nullable=False)  
  
@app.route('/register', methods=['GET', 'POST'])  
def register():  
    if request.method == 'POST':  
        new_user = User(username=request.form['username'], password=request.form['password'])  
        db.session.add(new_user)  
        db.session.commit()  
        return redirect(url_for('login'))  
    return '''  
    <form method="post">  
        Username: <input type="text" name="username"><br>  
        Password: <input type="password" name="password"><br>  
        <input type="submit" value="Register">  
    </form>  
    '''  
  
if __name__ == '__main__':  
    db.create_all()  # 创建数据库表  
    app.run(debug=True)

这段代码配置了一个SQLite数据库,并创建了一个用户模型。我们定义了一个路由/register来处理用户注册请求,当用户提交表单时,会将新用户信息保存到数据库中。

运行并测试用户注册功能
保存所有文件后,重新运行你的Flask应用。打开浏览器,访问http://127.0.0.1:5000/register,你会看到一个注册表单。填写表单并提交后,用户信息将被保存到数据库中,并重定向到登录页面(尽管登录页面尚未实现)。

六、总结与展望

通过本文,你已经从零开始搭建了一个简单的Flask Web应用,并学会了如何创建路由、渲染模板、处理表单提交和使用数据库存储数据。Flask是一个灵活且易于扩展的框架,你可以根据需要添加更多功能,如用户认证、文件上传、电子邮件发送等。

随着你对Flask理解的加深,你将能够构建更加复杂和强大的Web应用。Flask的插件库非常丰富,你可以使用现成的插件来简化开发工作。同时,你也可以学习Flask的底层原理,以便更好地理解其工作原理并优化你的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏启动失败:8种修复xinput1_3.dll错误的几种方法教程,轻松解决xinput1_3.dll错误

当你准备好在一天的工作后放松一下&#xff0c;启动你最爱的游戏&#xff0c;却突然收到一个“xinput1_3.dll 丢失”的错误消息&#xff0c;这无疑是令人沮丧的。幸运的是&#xff0c;xinput1_3.dll丢失问题通常可以通过几个简单的步骤来解决。本文将详细介绍这些步骤&#xff…

Halcon-模板匹配(WPF)

halcon的代码 dev_open_window (0, 0, 512, 512, black, WindowHandle) read_image (Image, C:/Users/CF/Desktop/image.jpg) dev_display (Image)draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2) gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2) r…

《AI从0到0.5》之提示工程

参考资料&#xff1a;《AI提示工程&#xff1a;基础 应用 实例》万欣 主要内容&#xff1a; 该文章是对《AI提示工程&#xff1a;基础 应用 实例》这本书的浓缩整理&#xff0c;旨在让读者快速的了解AI提示工程的概念和设计原则、策略和技巧、部分应用案例。并结合笔者自…

@FISCO BCOS的朋友们,年度生态大会邀您查收成果集结令

七载春秋&#xff0c;繁星相映。站在开源七周年的重要节点上&#xff0c;FISCO BCOS年度生态大会再次面向全社区发出产业数字化成果集结令&#xff0c;邀请FISCO BCOS的朋友们于今年12月份共探区块链产业的发展现状与未来。 作为深圳国际金融科技节的重要组成部分和特色活动&a…

Linux文件清空的五种方法总结分享

简介&#xff1a; 每种方法各有优势&#xff0c;选择最合适的一种或几种&#xff0c;可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源&#xff0c;欢迎访问&#xff0c;持续提升您的运维技能。 在Linux操作系统环境下&#xff0c;清空文件内容是日常维护和管理中…

Android文件选择器[超级轻量级FilePicker测试没有问题][挣扎解决自带文件管理器获取不到绝对地址问题而是返回msf%3A1000038197]

超级轻量级FilePicker测试没有问题 本文摘录于&#xff1a;https://blog.csdn.net/gitblog_00365/article/details/141449437只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 今天真的是发了疯的找文件管理器,因为调用系统自带的文件管理…

向量的基础知识和矩阵向量的坐标旋转

向量的基础&#xff1a; 定义&#xff1a; 既有大小&#xff0c;又有方向的量叫做向量&#xff08;Vector&#xff09;。 在几何上&#xff0c;向量用有向线段来表示&#xff0c;有向线段长度表示向量的大小&#xff0c;有向线段的方向表示向量的方向。其实有向线段本身也是向…

java控制台打印加法口诀

具体代码&#xff1a; public class AdditionTable {public static void main(String[] args) {//add();//add2();//add3();add1();}public static void add(){for(int i2;i<10;i){for(int j1;j<i;j){String format String.format("%-7s",j""(i-j)…

【Deno运行时】深入解析Deno:下一代JavaScript和TypeScript运行时

&#x1f9d1;‍&#x1f4bc; 一名茫茫大海中沉浮的小小程序员&#x1f36c; &#x1f449; 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️&#xff01; &#x1f4d1; 目录 &#x1f53d; 前言1️⃣ Deno简介2️⃣ Deno的核心特性3️⃣ Deno与Node.js的区别4️⃣ …

OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/143432922 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

数字IC后端实现之Innovus Place跑完density爆涨案例分析

下图所示为咱们社区a7core后端训练营学员的floorplan。 数字IC后端实现 | Innovus各个阶段常用命令汇总 该学员跑placement前density是59.467%&#xff0c;但跑完place后density飙升到87.68%。 仔细查看place过程中的log就可以发现Density一路飙升&#xff01; 数字IC后端物…

一文总结AI智能体与传统RPA机器人的16个关键区别

基于LLM的AI Agent&#xff08;智能体&#xff09;与**RPA&#xff08;机器人流程自动化&#xff0c;Robotic Process Automation&#xff09;**两种技术在自动化任务领域中扮演着至关重要的角色。AI智能体能够借助LLM拥有极高的灵活性&#xff0c;可以实时理解和响应环境的变化…

ES(2)(仅供自己参考)

Java代码的索引库&#xff1a; package cn.itcast.hotel;import lombok.AccessLevel; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsea…

【机器学习】24. 聚类-层次式 Hierarchical Clustering

1. 优势和缺点 优点&#xff1a; 无需提前指定集群的数量 通过对树状图进行不同层次的切割&#xff0c;可以得到所需数量的簇。树状图提供了一个有用的可视化-集群过程的可解释的描述树状图可能揭示一个有意义的分类 缺点&#xff1a; 计算复杂度较大, 限制了其在大规模数据…

Rust 力扣 - 2379. 得到 K 个黑块的最少涂色次数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 本题可以转换为求长度为k的子数组中白色块的最少数量 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的白色块的数量即可&#xff0c;遍历过程中刷新白色块的数量的最小值 题解代码 impl Solution {…

Git创建和拉取项目分支的应用以及Gitlab太占内存,如何配置降低gitlab内存占用进行优化

一、Git创建和拉取项目分支的应用 1. 关于git创建分支&#xff0c; git创建分支&#xff0c;可以通过git管理平台可视化操作创建&#xff0c;也可以通过git bash命令行下创建&#xff1a; A. 是通过git管理平台创建&#xff1a; 进入gitlab管理平台具体的目标项目中&#xff…

ubuntu-开机黑屏问题快速解决方法

开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法&#xff1a; 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式&#xff0c;进去后重装显卡驱动&#xff0c;重启即可解决。附加问题&#xff1a;ubuntu的默认显示管理器是gdm3,如果重…

《高频电子线路》 —— 反馈型振荡器

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 反馈型振荡器基本工作原理 振荡器分类 自激&#xff1a;没有信号输入他激&#xff1a;有信号输入RC振荡器主要产生低频的正弦波&#x…

unity发布webGL

1.安装WebGL板块 打开unity&#xff0c;进入该界面&#xff0c;然后选择圈中图标 选择添加模块 选择下载WebGL Build Support 2.配置项目设置 打开一个unity项目&#xff0c;如图进行选择 如图进行操作 根据自己的情况进行配置&#xff08;也可直接点击构建和运行&#xff09…

nodejs批量修改word文档目录样式

工作中遇到一个需求:写个nodejs脚本,对word文档(1000+个)的目录页面进行美化。实现过程遇到不少麻烦,在此分享下。 整体思路 众所周知,Docx格式的Word文档其实是个以xml文件为主的zip压缩包,所以,页面美化整体思路是:先将文档后缀名改为zip并解压到本地,然后将关键的…