Flask学习一:概述
搭建项目
安装框架
pip install Flask
第一个程序
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return "Hello World"if __name__ == '__main__':app.run()
怎么说呢,感觉还不错的样子。

调试模式
if __name__ == '__main__':app.run(debug=True)
简单说可以理解为热重启,当你修改代码后,不需要重新启动程序。程序会自动重新进行编译。
不过网页的话,需要手动刷新一下,暂时没有看到页面内容自动更新。

路由
路由
@app.route('/')
表示访问项目的根URL,通过装饰器的方式还是很方便的。
变量规则
可以通过向规则参数添加可变部分来动态构建URL。
@app.route('/hello/<name>')
def hello_name(name):return "hello %s!" % name

除了默认的字符串外还支持整型、浮点数
@app.route('/blog/<int:postID>')
def show_blog(postID):return 'Blog Number %d' % postID@app.route('/rev/<float:revNo>')
def revision(revNo):return 'Revision Number %f' % revNo
URL构建
url_for()函数对于动态构建特定函数的URL非常有用。 该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的可变部分。
个人立即应该就是重定向。
当访问者为admin时重定向到hello_admin函数,否则重定向到hello_guest函数
from flask import Flask, redirect, url_forapp = Flask(__name__)@app.route('/')
def hello_world():return "Hello World !"@app.route('/admin')
# 用户为admin时调整到admin页面
def hello_admin():return 'hello admin'@app.route('/guest/<guest>')
# 用户是访客时跳转到访客地址
def hello_guest(guest):return "hello guest %s" % guest@app.route('/user/<name>')
# 是网站用户
def hello_user(name):if name == 'admin':return redirect(url_for('hello_admin'))else:return redirect(url_for('hello_guest', guest=name))if __name__ == '__main__':app.run(debug=True)

HTTP请求
flask 的http请求支持GET 、HEAD、POST、PUT、DELEATE。实际工作中基本上就是get和post是最常用的。
get:以未加密的形式将数据发送到服务器。 最常用的方法。默认的路由请求方式
post:用于将HTML表单数据发送到服务器。 POST方法接收的数据不由服务器缓存。
简单的表单提交
<html><body><form action = "http://localhost:5000/login" method = "post"><p>Enter Name:</p><p><input type = "text" name = "nm" /></p><p><input type = "submit" value = "submit" /></p></form></body>
</html>
from flask import Flask, redirect, url_for, requestapp = Flask(__name__)@app.route('/success/<name>')
def success(name):return "welcome %s" % name@app.route('/login', methods=['POST', 'GET'])
def login():# post请求,form是固定属性if request.method == 'POST':user = request.form['nm']return redirect(url_for("success", name=user))# get请求else:user = request.args.get('nm')return redirect(url_for("success", name=user))if __name__ == '__main__':app.run(debug=True)

模板引擎
现在大部分的web项目都是前后端进行分离的,但是你的项目比较小的时候,就完全没有必要进行前后端分离了。那么flask如何显示前端页面呢?可以利用Flask的 Jinja2 模板引擎
加载普通页面
hello-world.html
<html><body><h1>你好世界</h1></body>
</html>
hello.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def hello_world():return render_template('hello-world.html')if __name__ == '__main__':app.run(debug=True)

注意
你的html文件一定要在templates下,否则会找不到对应的页面

有参页面
<html><body><h1>你好世界</h1><h2>这是参数:{{user}}</h2></body>
</html>@app.route('/<name>')
def hello_world(name):return render_template('hello-world.html', user=name)
注意
页面的参数与路由的参数一定要保持一致。

静态文件
网络应用程序通常需要一个静态文件,例如支持显示网页的 javascript 文件或 CSS 文件。 通常,网络服务器配置为为您提供服务,但在开发过程中,这些文件是从您的软件包中的 static 文件夹或模块旁边提供的
注意: 一定要有一个static文件夹
hello.html
<html><head><scripttype="text/javascript"src="{{ url_for('static', filename = 'js/hello.js') }}"></script><linkrel="stylesheet"href="{{url_for('static',filename='css/hello.css')}}"type="text/css"/></head><body><h1>你好世界</h1><h2>这是参数:{{user}}</h2><button onclick="sayHello()">点击</button></body>
</html>


cookie
Cookie以文本文件的形式存储在客户端的计算机上。 其目的是记住和跟踪与客户的使用相关的数据,以获得更好的访问者体验和网站统计信息。
请求对象包含Cookie的属性。 它是所有cookie变量及其对应值的字典对象,客户端已传输。 除此之外,cookie还存储其到期时间,路径和站点的域名。
设置cookie
@app.route('/setcookie', methods = ['POST', 'GET'])
def setcookie():if request.method == 'POST':user = request.form['nm']resp = make_response(render_template('readcookie.html'))resp.set_cookie('userID', user)return resp
在Flask中,对响应对象设置cookie。 使用 make_response()函数从视图函数的返回值获取响应对象。 之后,使用响应对象的 set_cookie()函数来存储cookie。
获取cookie
@app.route('/getcookie')
def getcookie():name = request.cookies.get('userID')return '<h1>welcome '+name+'</h1>'
会话
与Cookie不同,会话数据存储在服务器上。 会话是客户端登录到服务器并注销它的时间间隔。 需要在该会话中保存的数据存储在服务器上的临时目录中。
与每个客户端的会话都分配有会话ID 。 会话数据存储在cookie的顶部,服务器对它们进行加密签名。 对于此加密,Flask应用程序需要定义 SECRET_KEY 。
Session对象也是一个字典对象,包含会话变量和关联值的键值对。
设置
Session['username'] = 'admin'
释放
session.pop('username', None)
secret_key
app = Flask(__name__)
app.secret_key = 'any random string’
在Flask应用程序中,secret_key是一个重要的配置项,它被用于加密会话数据、生成安全令牌和防止跨站点请求伪造(CSRF)攻击。
以下是secret_key的作用:
-
会话加密:Flask使用
secret_key来加密和解密会话数据,以确保会话中的敏感信息(如用户身份验证凭据)在传输过程中是安全的。如果没有设置secret_key,会话数据将无法进行加密。 -
安全令牌:Flask使用
secret_key生成安全令牌(例如,用于重置密码的令牌)。这样,只有持有正确的secret_key的应用程序才能验证和解析这些令牌。 -
CSRF保护:
secret_key还用于生成和验证CSRF令牌。CSRF攻击是一种利用用户在其他站点上的身份验证信息执行恶意操作的攻击方式。通过使用secret_key生成CSRF令牌,Flask可以确保只有持有正确secret_key的应用程序才能验证和处理来自用户的请求,从而防止CSRF攻击。
因此,secret_key在Flask应用程序中是非常重要的配置项,必须保持安全且不泄露给其他人。
错误代码
在Flask中,abort()是一个函数,用于提前终止请求并返回指定的错误响应。它可以用于在处理请求时检测到错误或不符合条件的情况下,立即结束请求并返回相应的错误页面或错误信息。
abort()函数接受一个HTTP状态码作为参数,表示要返回的错误响应的状态码。常见的HTTP状态码包括:
- 400:Bad Request(错误的请求)
- 401:Unauthorized(未授权)
- 403:Forbidden(禁止访问)
- 404:Not Found(找不到资源)
- 500:Internal Server Error(服务器内部错误)
以下是一个使用abort()函数返回HTTP状态码为404的示例:
from flask import Flask, abortapp = Flask(__name__)@app.route('/')
def index():# 检查某些条件,如果条件不满足,终止请求并返回404错误if not some_condition:abort(404)return 'Hello, World!'if __name__ == '__main__':app.run()
在上述示例中,如果some_condition条件不满足,请求将被终止并返回404错误响应。你可以根据需要选择适当的HTTP状态码来使用abort()函数。

相关文章:
Flask学习一:概述
搭建项目 安装框架 pip install Flask第一个程序 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "Hello World"if __name__ __main__:app.run()怎么说呢,感觉还不错的样子。 调试模式 if __name__ __main__:a…...
LeetCode:689. 三个无重叠子数组的最大和(dp C++)
目录 689. 三个无重叠子数组的最大和 题目描述: 实现代码与解析: dp 原理思路: 滑动窗口: 原理思路: 689. 三个无重叠子数组的最大和 题目描述: 给你一个整数数组 nums 和一个整数 k ,找…...
Leetcode—206.反转链表【简单】
2023每日刷题(三十三) Leetcode—206.反转链表 头插法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {if(head NULL…...
Linux - 内存 - 预留内存占用分析
说明 Linux启动log中会显示平台的内存信息,公司SOC平台,物理DRAM实际size是128M,但是启动log中total size不足128MB,并且预留内存(82272K reserved)过多,启动log如下: Memory: 480…...
Java学习之路 —— Java高级
文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了,…...
git使用及常用命令
在初入公司中,若使用的是git管理工具,需要做以下步骤: 1,常用命令在: (1),git config --global user.name xxx(名字) //若不设置 那么下次提交代码时会报错 其次该设置名字和…...
vue 学习 -- day36(分析工程结构)
//引入的不再是Vue构造函数了,引入的是一个名为createApp的工厂函数 import { createApp } from vue import App from ./App.vue //创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更“轻”,它少了很多属性和方法) const app creat…...
SQL Injection
SQL Injection SQL injection(SQL注入),通过在输入字段或URL查询参数中执行SQL命令,导致对数据库的未经授权的访问。如果SQL注入成功,未经授权的人可能会读取、创建、更新甚至删除数据库表的记录 举个例子:…...
【Go入门】 Go搭建一个Web服务器
【Go入门】 Go搭建一个Web服务器 前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,…...
VS 将 localhost访问改为ip访问
项目场景: 使用vs进行本地调试时需要多人访问界面,使用ip访问报错 问题描述 vs通过ip访问报错 虚拟机或其它电脑不能正常打开 原因分析: 原因是vs访问规则默认是iis,固定默认启动地址是localhost 解决方案: 1.vs项目启动之后会出现这个 右…...
app使用
font-face{font-family:‘kaishu’; src: url(data:application/font-ttf;charsetutf-8;base64,AAEAAAASAQAABAAgRFNJR5PpVzIAAAEsAAAacEdTVUIzhvftAAAbnAAAAXBPUy8yY8pHoQAAHQwAAABWY21hcAsTB9YAAB1kAADD5GN2dCAvAiIAADhSAAAA5pmcGdt/siFHQAA5OQAAAOiZ2FzcAAXAAkAAOiIAAAAEGds…...
【迅搜01】安装运行并测试XunSearch
安装运行并测试XunSearch 这回的新系列,我们将学习到的是一个搜索引擎 迅搜 XunSearch 的使用。这个搜索引擎在 PHP 圈可能还是有一点名气的,而且也是一直在更新的,虽说现在 ElasticSearch 已经是实际上的搜索引擎霸主了,而且还有…...
Mac电脑VSCode配置PHP开发环境
1.安装 PHP 首先,打开终端,安装 Homebrew,输入如下命令: $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装了 Homebrew 之后,你可以使用下面的…...
SpirngBoot + Vue 前后端分离开发工具代码
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏…...
【数据结构初阶】单链表(附全部码源)
单链表 1,单链表的概念及结构2,单链表的实现2.1初始化内容(所需文件,接口)2.2申请结点2.3打印单链表2.4尾插2.5头插2.6尾删2.7头删2.8查找2.9在pos位置之后插入2.10在pos位置前面插入2.11删除pos之后的值2.12删除pos位…...
数据治理入门
处理模式 模式名称常见场景常见框架批处理夜间几个小时,无人值守hive spark datax流处理7*24H一直运行,无人值守maxwell, flink, flume, kafka即席处理人机交互接口访问 web页面 数据治理的意义 数据质量低:数据错误,不准确或不…...
uniapp 微信小程序登录 新手专用 引入即可
预览 第一步导入插件 在引入的页面的登录按钮下拷贝一下代码 <template><view class"content"><button type"primary" click"login">微信登录</button></view><TC-WXlogin :wxloginwxlogin /> </templ…...
PMCW体制雷达系列文章(4) – PMCW雷达之抗干扰
说明 本文作为PMCW体制雷达系列文章之一,主要聊聊FMCW&PMCW两种体制雷达的干扰问题。事实上不管是通信领域还是雷达领域,对于一切以电磁波作为媒介的信息传递活动,干扰是无处不在的。近年来,随着雷达装车率的提高,…...
Gin框架源码解析
概要 目录 Gin路由详解 Gin框架路由之Radix Tree 一、路由树节点 二、请求方法树 三、路由注册以及匹配 中间件含义 Gin框架中的中间件 主要讲述Gin框架路由和中间件的详细解释。本文章将从Radix树(基数树或者压缩前缀树)、请求处理、路由方法树…...
MacOS设置JAVA_HOME环境变量
首先先查看一下,系统当前使用的java是谁,可以使用/usr/libexec/java_home命令 % /usr/libexec/java_home /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home检查一下这个路径下的文件,发现这是一个jre的目录。加上-V参数看…...
如何高效处理大型AI模型:ONNX外部数据实战指南
如何高效处理大型AI模型:ONNX外部数据实战指南 【免费下载链接】onnx Open standard for machine learning interoperability 项目地址: https://gitcode.com/gh_mirrors/onn/onnx 当深度学习模型参数规模突破2GB时,你是否遇到过"protobuf太…...
mysql视图和用户管理
视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图很简单,就是把我们后面的select之前我们使用的时候是形成一…...
脉冲神经网络在工业预测性维护中的低功耗应用
1. 脉冲神经网络在工业预测性维护中的低功耗革命在工业物联网(IIoT)领域,设备健康监测一直面临着能耗与精度的双重挑战。传统振动监测方案需要将高分辨率数据上传云端分析,不仅产生巨大通信开销,更限制了电池供电设备的续航能力。我们团队最近…...
扩散模型量化技术:挑战、突破与实战指南
1. 项目概述:扩散模型量化的技术挑战与突破在生成式AI领域,扩散模型已成为图像合成的标杆技术,但其庞大的参数量(如Stable Diffusion的U-Net约8.6亿参数)导致显著的部署门槛。传统32位浮点(FP32)…...
PyTorch 模型迁移实战:从 GPU 到 NPU
前言 把在 GPU 上训练好的 PyTorch 模型迁到昇腾 NPU,大部分时候不难,但细节很多。这篇文章讲一个完整的迁移流程,从环境准备到性能验证。环境准备 安装驱动和工具包 # 检查 NPU 设备 lspci | grep d802# 安装驱动(已安装则跳过&a…...
全同态加密在SVM隐私推理中的性能实测与参数调优
1. 项目概述与核心价值在数据驱动的时代,机器学习模型正以前所未有的深度渗透到医疗诊断、金融风控、个性化推荐等核心领域。这些模型的表现力,很大程度上依赖于海量、高质量的训练数据,而这些数据中往往包含着用户的个人可识别信息ÿ…...
用Python解放你的记忆:Genanki自动化Anki卡片生成终极指南
用Python解放你的记忆:Genanki自动化Anki卡片生成终极指南 【免费下载链接】genanki A Python 3 library for generating Anki decks 项目地址: https://gitcode.com/gh_mirrors/ge/genanki 你是否曾为手动创建数百张Anki卡片而头痛?是否想过将学…...
安卓反调试绕过实战:Frida分层Hook与动态修复指南
1. 为什么“绕过反调试”不是技术炫技,而是逆向分析的生存底线在安卓应用安全分析现场,我见过太多人卡在第一关:刚用adb shell连上设备,frida -U -f com.example.app --no-pause一敲下去,目标App闪退,Logca…...
量子纠错新突破:VarQEC变分编码技术解析
1. 量子纠错基础与VarQEC创新点量子计算的核心挑战在于量子态的脆弱性——环境噪声会导致量子信息不可逆的丢失。传统量子纠错(QEC)采用类似经典重复码的思路,通过将逻辑量子比特编码到多个物理比特上构建纠错码。例如著名的[[5,1,3]]完美码使用5个物理比特保护1个逻…...
GCN vs MLP:在Cora数据集上,图神经网络到底强在哪?(附可视化对比)
GCN与MLP在Cora数据集上的本质差异:从特征聚合到空间重构的认知升级当我们面对学术文献分类任务时,传统机器学习方法往往将每篇文献视为独立个体进行处理。这种处理方式在Cora数据集上通常只能获得约50%的分类准确率,而图卷积网络(GCN)却能轻…...
