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

Python Flask Web框架初步入门

前言

flask基础

搭建flask服务器

定义html

使用templates模板定义页面的html

html页面编写

render_template传参变量

定义图片

创建static目录,存入图片

html编写

flask入门

网站多域名

网站之间超链接跳转

入门案例

将centos的rpm包下载链接集成到自己的服务器

1.编写代码

2.导出html页面,并放到template目录

3.编写Index.html

4.访问127.0.0.1:8080


前言

 Flask诞生于2010年,是Armin ronacher用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。

特点
微框架、简洁、只做他需要做的,给开发者提供了很大的扩展性。
Flask和相应的插件写得很好,用起来很爽。
开发效率非常高,比如使用SQLAlchemy的ORM操作数据库可以节省开发者大量书写sql的时间。
把默认的Jinija2模板引擎替换成其他模板引擎都是非常容易的。
框架对比
1) 框架轻重

重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django
轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、Tornado
2)与Django对比

django提供了:

django-admin快速创建项目工程目录
manage.py 管理项目工程
orm模型(数据库抽象层)
admin后台管理站点
缓存机制
文件存储系统
用户认证系统

一些常用的 Flask 方法的简要介绍:

  1. route(rule, methods=['GET'])

    • 用于定义 URL 规则和请求方法的映射关系,指定了响应请求的处理函数。
  2. render_template(template_name_or_list, **context)

    • 用于渲染模板文件,并传递上下文变量到模板中进行渲染。
  3. request.args

    • 获取请求 URL 中的查询参数。
  4. request.form

    • 获取 POST 请求发送的表单数据。
  5. request.files

    • 获取上传的文件数据。
  6. session

    • 用于存储用户会话信息,可以在不同请求之间共享数据。
  7. redirect(location, code=302)

    • 重定向到指定的 URL。
  8. url_for(endpoint, **values)

    • 生成指定端点对应的 URL。
  9. jsonify(*args, **kwargs)

    • 将传入的数据序列化为 JSON 格式,并创建包含 JSON 数据的 Response 对象。
  10. make_response(*args)

    • 创建一个自定义的响应对象,可以设置 HTTP 状态码、头部信息等。
  11. abort(status_code)

    • 中止请求并返回指定的 HTTP 状态码。

flask基础

搭建flask服务器
from flask import Flaskwebapp = Flask(__name__)if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

导入 Flask 模块,用于创建 Web 应用程序

创建了一个名为 webapp 的 Flask 应用实例

启动 Flask 应用程序,监听本地主机的 127.0.0.1 地址的 8080 端口,设置 debug 模式为 True,出现错误时后台显示调试信息

 截图显示有一个 GET 请求尝试访问根路径 /,但是返回了 404 错误,表明应用中没有处理根路径的路由

所以要添加url路由,观察如下代码:


from flask import Flaskwebapp = Flask(__name__)@webapp.route('/')
def index():return "这是一个测试页面"if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

 使用装饰器 @webapp.route('/') 调用route路由,括号里给定参数,/符号默认为首页

当路由定位到这个默认的页面时,就调用这个index函数的返回内容。

所以访问127.0.0.1:8080时,实际上默认访问的是127.0.0.1:8080/    这个/  就根据路由走到了index函数

返回一个正常的页面了

 正常来说访问一个页面的时候,返回的是html的精美页面,那么如何实现呢?

定义html
使用templates模板定义页面的html

在当前项目中新建目录:templates

html页面编写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的网页</title>
</head>
<body><h1>欢迎来到我的网页!</h1>
<p>这是一个简单的 HTML 示例。</p></body>
</html>

from flask import Flask
from flask import render_templatewebapp = Flask(__name__)@webapp.route('/')
def index():return render_template('index.html')if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

 导入render_template方法

调用该方法指定 index.html

因为flask框架在使用这个模板函数时,默认去寻找项目文件夹下的templates文件夹里的html文件

render_template传参变量

如果想通过render_template方法传输数据,在html文件中显示出来,需要在render_template函数中加入数据参数,如data=msg

html编写格式:{{变量}}

from flask import Flask
from flask import render_templatewebapp = Flask(__name__)@webapp.route('/')
def index():msg = "Welcome"return render_template('index.html', data=msg)if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

 加了变量msg,render_template方法中制定了data数据

html编写加上{{data}},调用变量内容

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的网页</title>
</head>
<body><h1>欢迎来到我的网页!</h1>
<p>这是一个简单的 HTML 示例。</p>
{{data}}   # 显示传递变量的内容  Welcome
</body>
</html>

定义图片

如果想在该页面添加图片或者css、js文件,就需要使用到flask框架默认设置的static目录方式,即将这些图片、css、js文件存放到项目目录下的static目录,然后使用路由指向。

创建static目录,存入图片

html编写

添加如下代码:

 <img src="{{ url_for('static', filename='风景.webp') }}" alt="风景图片">
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>网页标题</title>
</head>
<body><h1>欢迎来到我的网页!</h1><img src="{{ url_for('static', filename='风景.webp') }}" alt="风景图片"><p>这是一个简单的 HTML 示例。</p>{{data}}
</body>
</html>

url_for函数用于生成静态文件的 URL,将定义的静态文件显示到页面上

flask入门

网站多域名
from flask import Flask
from flask import render_templatewebapp = Flask(__name__)@webapp.route('/')
def index():return render_template('index.html')@webapp.route('/login')
def login():return render_template('login.html')if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

再main文件里定义多个url路由

访问网址 127.0.0.1/login后,调用login.html

用户登陆的login.html

<!DOCTYPE html>
<html>
<head><title>User Login</title>
</head>
<body><h2>User Login</h2><form action="/login" method="post"><div><label for="username">Username:</label><input type="text" id="username" name="username"></div><div><label for="password">Password:</label><input type="password" id="password" name="password"></div><div><input type="submit" value="Login"></div></form>
</body>
</html>

访问127.0.0.1/login:

网站之间超链接跳转

访问默认网址,网页显示一个可点击的链接可跳转到其他界面,可以使用a超链接实现使用url_for函数

from flask import Flask
from flask import render_templatewebapp = Flask(__name__)@webapp.route('/')
def index():return render_template('index.html')@webapp.route('/info')
def info():return render_template('info.html')if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)

index.html编写加入a超链接

<ul><li><a href="/info">去看相关介绍说明</a></li>
</ul>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>网页标题</title>
</head>
<body><h1>欢迎来到我的网页!</h1><img src="{{ url_for('static', filename='风景.webp') }}" alt="风景图片"><p>这是一个简单的 HTML 示例。</p>{{data}}
<ul><li><a href="/info">去看相关介绍说明</a></li>
</ul>
</body>
</html>

点击“去看相关介绍说明”则跳转到/info这个界面

info.html

<!DOCTYPE html>
<html>
<head><title>Flask常用方法介绍</title>
</head>
<body><p><strong>route(rule, methods=['GET']):</strong> 用于定义 URL 规则和请求方法的映射关系,指定了响应请求的处理函数。</p><p><strong>render_template(template_name_or_list, **context):</strong> 用于渲染模板文件,并传递上下文变量到模板中进行渲染。</p><p><strong>request.args:</strong> 获取请求 URL 中的查询参数。</p><p><strong>request.form:</strong> 获取 POST 请求发送的表单数据。</p><p><strong>request.files:</strong> 获取上传的文件数据。</p><p><strong>session:</strong> 用于存储用户会话信息,可以在不同请求之间共享数据。</p><p><strong>redirect(location, code=302):</strong> 重定向到指定的 URL。</p><p><strong>url_for(endpoint, **values):</strong> 生成指定端点对应的 URL。</p><p><strong>jsonify(*args, **kwargs):</strong> 将传入的数据序列化为 JSON 格式,并创建包含 JSON 数据的 Response 对象。</p><p><strong>make_response(*args):</strong> 创建一个自定义的响应对象,可以设置 HTTP 状态码、头部信息等。</p><p><strong>abort(status_code):</strong> 中止请求并返回指定的 HTTP 状态码。</p>
</body>
</html>

看下访问结果

访问/    显示:

点击链接跳转

可发现url变成了 /info 

入门案例

将centos的rpm包下载链接集成到自己的服务器
1.编写代码
from flask import Flask
from flask import render_templatewebapp = Flask(__name__)@webapp.route('/')
def index():return render_template('index.html')@webapp.route('/download')
def download():return render_template('rpm_list_download.html')if __name__ == '__main__':webapp.run(port=8080, host='127.0.0.1', debug=True)
2.导出html页面,并放到template目录

3.编写Index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>网页标题</title><style>body {font-family: Arial, sans-serif;text-align: center;background-color: #f4f4f4;margin: 0;padding: 0;}#content-container {max-width: 600px;margin: 20px auto;padding: 20px;background-color: #fff;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}h1 {color: #333;}img {max-width: 100%;height: auto;margin-bottom: 20px;}ul {list-style: none;padding: 0;}li {margin-top: 10px;}a {text-decoration: none;color: #007bff;}</style>
</head>
<body><div id="content-container"><h1>欢迎来到我的Centos Rpm下载页面</h1><img src="static/centos.webp" alt="Centos"><p>{{data}}</p><ul><li><a href="/download">👉 点击这里下载</a></li></ul></div>
</body>
</html>
4.访问127.0.0.1:8080

点击下载即可

相关文章:

Python Flask Web框架初步入门

前言 flask基础 搭建flask服务器 定义html 使用templates模板定义页面的html html页面编写 render_template传参变量 定义图片 创建static目录&#xff0c;存入图片 html编写 flask入门 网站多域名 网站之间超链接跳转 入门案例 将centos的rpm包下载链接集成到自…...

【设计模式】工厂方法模式详解

在java中&#xff0c;万物皆对象&#xff0c;这些对象都需要创建&#xff0c;如果创建的时候直接new该对象&#xff0c;就会对该对象耦合严重&#xff0c;假如我们要更换对象&#xff0c;所有new对象的地方都需要修改一遍&#xff0c;这显然违背了软件设计的开闭原则。如果我们…...

独立游戏《星尘异变》UE5 C++程序开发日志3——UEC++特供的数据类型

本篇日志将介绍FString&#xff0c;FText、FName的用法和相互转换&#xff0c;以及容器TMap&#xff0c;TArray的增删查改 一、字符串相关数据类型&#xff1a;FString、FText、FName FString是最接近std::string的类型&#xff0c;字符串本身可以看做一个存储char型的动态数…...

递归方法的理解

递归方法调用 &#xff1a;方法自己调用自己的现象就称为递归。 递归的分类 : 直接递归、间接递归。 直接递归&#xff1a;方法自身调用自己 public void methodA (){ methodA (); } 间接递归&#xff1a;可以理解为A()方法调用B()方法&#xff0c;B()方法调用C()方法&am…...

css之flex布局文本不换行不显示省略号的解决方法

文章目录 一、单行长文本显示省略号二、flex布局下的处理技巧 一、单行长文本显示省略号 先讲讲常规情况下长文本不跨行显示省略号的代码&#xff1a; overflow: hidden; //不允许内容超出盒子 white-space: nowrap; //不允许文本跨行 text-overflow: ellipsis; //文本超…...

华清远见STM32U5开发板助力2024嵌入式大赛ST赛道智能可穿戴设备及IOT选题项目开发

第七届&#xff08;2024&#xff09;全国大学生嵌入式芯片与系统设计竞赛&#xff08;以下简称“大赛”&#xff09;已经拉开帷幕&#xff0c;大赛的报名热潮正席卷而来&#xff0c;高校电子电气类相关专业&#xff08;电子、信息、计算机、自动化、电气、仪科等&#xff09;全…...

若依框架实现不同端用户登录(后台管理用户和前台会员登录——sping security多用户)

目录 需求背景 前期准备 实现UserDetailsService接口 改造loginUser 声明自定义AuthenticationManager 的bean 自定义登录接口 参考文章 效果如下 需求背景 用若依搭建的后台管理环境&#xff0c;但是前台用户系统&#xff08;前端&#xff09;并没有和若依的前端集成在一起。…...

【解決|三方工具】Obi Rope 编辑器运行即崩溃问题

开发平台&#xff1a;Unity 2021.3.7 三方工具&#xff1a;Unity资产工具 - Obi Rope   问题背景 使用Unity三方开发工具 - Obi Rope 模拟绳索效果。配置后运行 Unity 出现报错并崩溃。通过崩溃日志反馈得到如下图所示 这是一个序列化问题造成的崩溃&#xff0c;指向性为 Obi…...

岭师大数据技术原理与应用-序章-软工版

HeZaoCha-CSDN博客 序章—软工版 一、环境介绍1. VMware Workstation Pro2. CentOS3. Java4. Hadoop5. HBase6. MySQL7. Hive 二、系统安装1. 虚拟网络编辑器2. 操作系统安装 三、结尾 先说说哥们写这系列博客的原因&#xff0c;本来学完咱也没想着再管部署这部分问题的说&…...

Leetcode 680. 验证回文串 II

给你一个字符串 s&#xff0c;最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;s “aba” 输出&#xff1a;true 示例 2&#xff1a…...

网络安全接入认证-802.1X接入说明

介绍 802.1X是一个网络访问控制协议&#xff0c;它可以通过认证和授权来控制网络访问。它的基本原理是在网络交换机和认证服务器之间建立一个安全的通道&#xff0c;并要求客户端提供身份验证凭据。如果客户端提供的凭据是有效的&#xff0c;交换机将开启端口并允许访问。否则&…...

iPhone的iOS系统:定义移动智能体验,引领科技潮流之巅

来自&#xff1a;dlshuhua.com/post/83721.html 在移动智能设备领域&#xff0c;iPhone一直以其出色的性能和独特的用户体验脱颖而出。而这一切的背后&#xff0c;离不开其强大的操作系统——iOS。iOS系统不仅为iPhone提供了强大的性能支持&#xff0c;更通过不断创新和升级&a…...

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络&#xff1a;传输控制协议&#xff08;Transmission Control Protocol-TCP协议&#xff09; 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手&#xff0c;243)1.1 为什么要三次握手&#xff0c;两次不行吗&#xff1f; 2. 释放连接的过程(…...

GEE实践应用|热岛效应(一)地表温度计算

目录 1.学习目标 2.理论介绍 3.从MODIS获得地表温度 4.从Landsat卫星获得地表温度 1.学习目标 ①了解如何使用GEE计算地表温度 2.理论介绍 城市化涉及用建筑物、道路和停车场等建筑结构取代自然景观。这种土地覆盖的改变也改变了土地表面的特性。这些变化的范围从表面反射和…...

Java查找算法知识点(含面试大厂题和源码)

查找算法是计算机科学中的基础概念&#xff0c;它们在解决实际问题时扮演着关键角色。了解和掌握不同的查找算法&#xff0c;能够帮助我们更高效地处理数据检索任务。以下是一些关于查找算法的关键知识点&#xff1a; 算法分类&#xff1a; 线性查找算法&#xff1a;按照顺序逐…...

67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上

基本思想&#xff1a;需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwdq2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model YOLO("yolov8s.yaml")…...

A Little Is Enough: Circumventing Defenses For Distributed Learning

联邦学习的攻击方法&#xff1a;LIE 简单的总结&#xff0c;只是为了能快速想起来这个方法。 无目标攻击 例如总共50个客户端&#xff0c;有24个恶意客户端&#xff0c;那么这个时候&#xff0c;他需要拉拢2个良性客户端 计算 50 − 24 − 2 50 − 24 0.923 \frac{50-24-2}{…...

文心一言 VS 讯飞星火 VS chatgpt (225)-- 算法导论16.3 7题

七、推广赫夫曼算法&#xff0c;使之能生成三进制的码字(即码字由符号0、1、2组成)&#xff0c;并证明你的算法能生成最优三进制码。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 推广赫夫曼算法以生成三进制码字需要对算法进行一定的修改&#xff0c;确保在每…...

【计算机】——51单片机——持续更新

单片机是一种内部包含CPU、存储器和输入/输出接口等电路的集成电路&#xff08;IC芯片&#xff09; 单片机是单片微型计算机&#xff08;Single Chip Microcomputer&#xff09;的简称&#xff0c;用于控制领域&#xff0c;所以又称为微型控制器&#xff08;Microcontroller U…...

QT资源添加调用

添加资源文件&#xff0c;新建资源文件夹&#xff0c;命名resource&#xff0c;然后点下一步&#xff0c;点完成 资源&#xff0c;右键add Prefix 添加现有文件 展示的label图片切换 QLabel *led_show; #include "mainwindow.h" #include<QLabel> #include&l…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...