python之flask安装以及使用
1 flask介绍
Flask是一个非常小的Python Web框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。
2 python虚拟环境搭建
python虚拟环境管理方法: 1.virtualenv 2.Virtualenvwrapper 3.conda 4.pipenv
3 pipenv使用
┌──(kali㉿kali)-[~/Desktop/python_code] └─$ ls flask1 ┌──(kali㉿kali)-[~/Desktop/python_code] └─$ cd flask1 ┌──(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ pipenv shell
┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ ls Pipfile #Pipfile 等于安装的插件包名 ┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ cat Pipfile 安装 flask ┌──(flask1-l5Pm-i-x)─(kali㉿kali)-[~/Desktop/python_code/flask1] └─$ pipenv install flask
4 flask第一个应用
新建app.py
#!/usr/bin/env python3 from flask import Flask #初始化 app =Flask(__name__) @app.route('/') def index():return 'Hello World!' if __name__ == '__main__':app.run()
执行app.py
游览器效果
5 路由和视图函数
#!/usr/bin/env python3 # 这一行告诉系统使用哪个解释器来执行脚本,这里指定为 python3 from flask import Flask # 从flask模块中导入Flask类,用于创建Flask web应用程序实例 # 初始化 app = Flask(__name__) # 创建一个Flask应用程序实例,并赋值给变量app。__name__是当前模块的名字,代表应用程序的根路径 # 设置多个路由 @app.route('/') # 定义一个路由装饰器,当访问根路径'/'时,会调用下面的index函数 def index(): return 'Hello World!' # 定义一个视图函数index,当访问'/'路径时,返回'Hello World!'字符串 @app.route('/a') # 定义另一个路由装饰器,当访问'/a'路径时,会调用下面的add函数 def add(): return '1+1=2' # 定义一个视图函数add,当访问'/a'路径时,返回'1+1=2'字符串 @app.route('/user/<username>') # 定义一个带有动态部分的路由装饰器,'<username>'是一个动态部分,可以匹配任何字符串 def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username return 'Hello {} '.format(username) # 定义一个视图函数user_index,该函数接受一个参数username,这是从路由动态部分获取的。函数返回'Hello '加上用户名 @app.route('/post/<int:post_id>') # 定义一个带有动态部分且类型指定的路由装饰器,'<int:post_id>'表示动态部分必须是整数类型 def show_post(post_id): return 'Post {} '.format(post_id) # 定义一个视图函数show_post,该函数接受一个整数类型的参数post_id,这是从路由动态部分获取的。函数返回'Post '加上文章ID if __name__ == '__main__': # 判断当前脚本是否作为主程序运行 app.run(debug=True)
6URL重定向
#!/usr/bin/env python3 # 导入 Flask 框架 from flask import Flask from flask import url_for from flask import redirect # 初始化 Flask 应用 app = Flask(__name__) # 设置路由到根路径 '/' @app.route('/') def index(): return 'Hello World!' # 返回欢迎信息 # 设置路由到 '/a' @app.route('/a') def add(): return '1+1=2' # 返回加法运算结果 # 设置路由到 '/user/<username>',其中 <username> 是一个动态部分 @app.route('/user/<username>') def user_index(username): # 在视图函数中通过参数获取路由中的动态部分 username return 'Hello {} '.format(username) # 返回包含用户名的欢迎信息 # 设置路由到 '/post/<int:post_id>',其中 <int:post_id> 是一个整数类型的动态部分 @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {} '.format(post_id) # 返回包含帖子ID的字符串 # 设置路由到 '/test' @app.route('/test') def test(): # 使用 url_for 函数生成路由的 URL,并打印出来 print(url_for('index')) # 打印根路径的 URL print(url_for('user_index', username='scj')) # 打印用户路径的 URL,传入用户名 'scj' print(url_for('show_post', post_id=1)) # 打印帖子路径的 URL,传入帖子ID 1 return 'test' # 返回测试字符串 # 设置路由到 '/<username>',其中 <username> 是一个动态部分 @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}' .format(username) # 如果用户名是 'handsomescj',则返回欢迎信息 else: return redirect(url_for('index')) # 否则重定向到根路径 # 主程序入口 if __name__ == '__main__': app.run(debug=True) # 运行 Flask 应用,并开启调试模式 请注意,代码中有个小的错误,app =Flask(__name__) 这一行应该去掉变量名 app 前的空格,修改为 app = Flask(__name__)。 在 Flask 应用中,注释是一个很好的习惯,它们可以帮助你和其他开发者理解代码的功能和逻辑。在编写代码时,记得添加足够的注释,尤其是在复杂的逻辑部分。
7模板渲染
python #!/usr/bin/env python3 # 导入 Flask 框架 from flask import Flask from flask import url_for from flask import redirect from flask import render_template # 初始化 Flask 应用 app = Flask(__name__) # 设置路由到根路径 '/' @app.route('/') def index(): return 'Hello World!' # 返回欢迎信息 # 设置路由到 '/a' @app.route('/a') def add(): return '1+1=2' # 返回加法运算结果 # 设置路由到 '/user/<username>',其中 <username> 是一个动态部分 @app.route('/user/<username>') def user_index(username): # 使用 render_template 函数渲染 'user_index.html' 模板,并传入变量 username return render_template('user_index.html', username=username) # 返回渲染后的页面 # 设置路由到 '/post/<int:post_id>',其中 <int:post_id> 是一个整数类型的动态部分 @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {} '.format(post_id) # 返回包含帖子ID的字符串 # 设置路由到 '/test' @app.route('/test') def test(): # 使用 url_for 函数生成路由的 URL,并打印出来 print(url_for('index')) # 打印根路径的 URL print(url_for('user_index', username='scj')) # 打印用户路径的 URL,传入用户名 'scj' print(url_for('show_post', post_id=1)) # 打印帖子路径的 URL,传入帖子ID 1 return 'test' # 返回测试字符串 # 设置路由到 '/<username>',其中 <username> 是一个动态部分 @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}' .format(username) # 如果用户名是 'handsomescj',则返回欢迎信息 else: return redirect(url_for('index')) # 否则重定向到根路径 # 主程序入口 if __name__ == '__main__': app.run(debug=True) # 运行 Flask 应用,并开启调试模式
新建templates 文件夹
以及在templates 文件中新建user_index.html
<h1>hello,{{ username }}!</h1>
8 get与post请求
get请求
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template #初始化 app =Flask(__name__) #设置多个路由 @app.route('/') def index():return 'Hello World!' @app.route('/a') def add():return '1+1=2' @app.route('/user/<username>') def user_index(username):#在函数中指明变量名称username,就能获取到通过路由传入的变量usernamereturn render_template('user_index.html',username=username) @app.route(' /user/<password>' ) def user_password(password) :print( 'User-Agent :' , request.headers.get ( 'User-Agent ' ))print( 'time: ' , request.args. get( 'time'))print( 'q: ' , request.args. get( 'q'))print ( 'issinge : ' , request.args.get( ' issinge ' ))return ' password is{} '.format(password) @app.route('/post/<int:post_id>') def show_post(post_id):return 'Post {} '.format(post_id) @app.route('/test') def test():print(url_for('index'))print(url_for('user_index',username='scj'))print(url_for('show_post',post_id=1))return 'test' @app.route('/<username>') def hello(username):if username =='handsomescj':return 'Hello {}' .format(username)else:return redirect(url_for('index')) if __name__ == '__main__':app.run(debug=True)
post请求
#!/usr/bin/env python3 from flask import Flask, request, render_template, redirect, url_for # 初始化 app = Flask(__name__) # 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' @app.route('/user/<username>') def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username return render_template('user_index.html', username=username) @app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}'.format(username) else: return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' if __name__ == '__main__': app.run(debug=True)
新建client.py
#!/usr/bin/env python3 import requests # 设置需要发送的数据 user_info = { 'name': 'scj', # 去掉键和值之间的空格 'password': '123456', # 去掉键和值之间的空格 'hobbies': ['code', 'run'] # 列表中的字符串去掉空格 } # 向url发送post请求 r = requests.post("http://127.0.0.1:5000/register", data=user_info) print(r.status_code) # 打印请求返回的状态码
9session与cookie
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template from flask import request from flask import session from flask import make_response# 初始化 app = Flask(__name__) app.secret_key='kdjklfjkd87384hjdhjh'# 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' #@app.route('/user/<username>') #def user_index(username): # 在函数中指明变量名称username,就能获取到通过路由传入的变量username #return render_template('user_index.html', username=username) @app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' @app.route('/<username>') def hello(username): if username == 'handsomescj': return 'Hello {}'.format(username) else: return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' @app.route('/set_session') def set_session(): # 设置session的持久化 session.permanent = True session['username'] = 'scj' return '成功设置session' @app.route('/get_session') def get_session(): value = session.get('username') return '成功获取session值为:{}'.format(value)@app.route('/set_cookie/<username>') def set_cookie(username): resp = make_response(render_template('user_index.html', username=username)) resp.set_cookie('user', username) # 使用'user'作为cookie的名字 return resp @app.route('/get_cookie') def get_cookie(): username = request.cookies.get('username') # 使用'user'来检索cookie的值 return 'Hello {}'.format(username) # 修正格式化字符串的语法 if __name__ == '__main__': app.run(debug=True)
10 errot404
#!/usr/bin/env python3 from flask import Flask from flask import url_for from flask import redirect from flask import render_template from flask import request from flask import session from flask import make_response# 初始化 app = Flask(__name__) app.secret_key='kdjklfjkd87384hjdhjh'# 设置多个路由 @app.route('/') def index(): return 'Hello World!' @app.route('/a') def add(): return '1+1=2' @app.route('/user/<username>') def user_index(username): if username == 'invalid'abort(404)return render_template('user_index.html',username=username)@app.route('/user/<password>') def user_password(password): print('User-Agent:', request.headers.get('User-Agent')) print('time:', request.args.get('time')) print('q:', request.args.get('q')) print('issinge:', request.args.get('issinge')) return 'password is {}'.format(password) @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post {}'.format(post_id) @app.route('/test') def test(): print(url_for('index')) print(url_for('user_index', username='scj')) print(url_for('show_post', post_id=1)) return 'test' #@app.route('/<username>') #def hello(username): # if username == 'handsomescj': # return 'Hello {}'.format(username) # else: # return redirect(url_for('index')) @app.route('/register', methods=['GET', 'POST']) def register(): print('method:', request.method) print('name:', request.form['name']) print('password:', request.form.get('password')) print('hobbies:', request.form.getlist('hobbies')) print('age:', request.form.get('age', default=18)) return 'register success!' @app.route('/set_session') def set_session(): # 设置session的持久化 session.permanent = True session['username'] = 'scj' return '成功设置session' @app.route('/get_session') def get_session(): value = session.get('username') return '成功获取session值为:{}'.format(value)@app.route('/set_cookie/<username>') def set_cookie(username): resp = make_response(render_template('user_index.html', username=username)) resp.set_cookie('user', username) # 使用'user'作为cookie的名字 return resp @app.route('/get_cookie') def get_cookie(): username = request.cookies.get('username') # 使用'user'来检索cookie的值 return 'Hello {}'.format(username) # 修正格式化字符串的语法 @app.route(404) def not_found(error):return render_template('404.html'),404if __name__ == '__main__': app.run(debug=True)
404.html
错了,sb
相关文章:

python之flask安装以及使用
1 flask介绍 Flask是一个非常小的Python Web框架,被称为微型框架;只提供了一个稳健的核心,其他功能全部是通过扩展实现的;意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用。 2 python…...
汽车笔记-保险
保险 1.交强险 上路必须买的, 国家规定必须要买。交强险不管你是有责还是无责,它都是可以赔偿的。交强险还有一个18000的垫付功能,比如说我们出了交通事故后,对方住院治疗需要你垫付钱,那么这个时候就可以用到交强险…...
人工智能时代的图像识别:机遇与挑战并存
人工智能(AI)时代为图像识别领域带来了前所未有的机遇,同时也伴随着一系列挑战。这一领域的发展不仅深刻影响了科技、医疗、教育、娱乐等多个行业,还在一定程度上改变了人们的生活方式。 机遇: 技术突破与创新&#…...

工作 9 年后,回老家当计算机老师的真实感受
北京某程序员发帖,他说自己工作了整整 9 年后,今年六月就告别了北京这个大都市,安安心心地回老家当起了计算机老师。 工作日,每天早上 8 点就得按点上班儿,到了下午 4 点半,下班儿的铃声一响,就…...

二叉树的镜像【c++】
#include <iostream> #include <vector> using namespace std;//双链表节点结构 typedef struct treeNode {int value;struct treeNode* left;struct treeNode* right;treeNode(int x) : value(x), left(nullptr), right(nullptr) {} } TreeNode;void mirrorTree(T…...

记录Python的pandas库详解
如何生成一个pd import pandas as pd df pd.DataFrame([[1,2,3],[4,5,6]],index[A,B],columns[C1,C2,C3])df ---------------------------------------------------------------------------C1 C2 C3 A 1 2 3 B 4 5 6df.T -------------------------------------------------…...

阻碍团队使用工具的原因竟然是……
本文首发于个人网站「BY林子」,转载请参考版权声明。 工具化、自动化、数字化,这些都是逐步改善工作的质量和效率的方式,是时代不断进步的表现。然而,还是有很多软件开发团队的工作还处于手工阶段,这是为什么呢&#x…...
【并发】第九篇 Atomic原子操作类 - 字段更新器类详解
导航 简介AtomicIntegerFieldUpdater简介 Atomic的字段更新器类是Java中一种用于实现线程安全的字段更新操作的类。它提供了一组原子操作,可以对字段进行原子性的更新。在并发环境中,多个线程同时更新一个字段可能会出现竞态条件(Race Condition)导致数据不一致的问题。At…...

FFmpeg: 自实现ijkplayer播放器--03UI界面设计
文章目录 UI设计流程图UI设计界面点击播放功能实现 UI设计流程图 UI设计界面 主界面 控制条 播放列表 画面显示 标题栏 设置界面 提示框 点击播放功能实现 槽函数实现: connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &Main…...

【安装部署】Apache SeaTunnel 和 Web快速安装详解
版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本。 可以自定义兼容处理,官方提供了文档:https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用…...

泰迪智能科技携手洛阳理工学院共建“泰迪·洛阳理工数据智能工作室”
为深化校企合作,实现应用型人才培养目标,4月11日,洛阳理工学院携手广东泰迪智能科技股份有限公司举行“泰迪洛阳理工数据智能工作室”揭牌仪式暨工作室成员动员会在洛阳理工学院举行。洛阳理工学院计算机与信息工程学院院长石念峰、副院长李明…...

jenkins构建微信小程序并展示二维码
测试小程序的过程中,很多都是在回头和前端开发说一句,兄弟帮我打一个测试版本的测试码,开发有时间的情况下还好,就直接协助了,但是很多时候他们只修复了其中几个bug,其他需要修复的bug代码正在编写…...
阿里云大学考试python中级题目及解析-python中级
阿里云大学考试python中级题目及解析 1.WEB开发中,下列选项中能够实现客户端重定向的设置是() A.响应头设置Location状态码200 B.响应头设置Location状态码302 C.响应头设置Accept-Location状态码301 D.响应头设置Accept-Location状态码…...
攻防演练作为红方,怎么绕过Web应用防火墙
在攻防演练中,作为红方尝试绕过Web应用防火墙(WAF)是一项常见且具有挑战性的任务。这要求你对WAF的工作原理有深入的理解,并且能够创造性地应用各种技术来测试WAF的防御限制。以下是一些更专业且可操作的策略,用于尝试…...

AI音乐,8大变现方式——Suno:音乐版的ChatGPT - 第505篇
悟纤之歌 这是利用AI为自己制作的一首歌,如果你也感兴趣,可以花点时间阅读下本篇文章。 导读 随着新一代AI音乐创作工具Suno V3、Stable audio2.0、天工SkyMusic的发布,大家玩自创音乐歌曲,玩的不亦乐乎。而有创业头脑的朋友…...
【C++】模拟list
list的模拟真的很震撼,第一次学习时给我幼小的心灵留下了极大地冲击 接下来我们一起看看list模拟究竟是怎样一回事 目录 节点的封装:list类的实现:私有成员变量:构造函数:push_back && pop_back: 迭代器类的实…...

SAP项目任务一览表
根据SAP Activate项目管理方法论的主要精神,浓缩到一些主要的团队和任务。 主要的团队有: 项目管理(办公室)Project Management(office):项目经理团队,包括项目办公室。负责项目整体运行和监控,项目办公室负责项目的…...
130个学术网站和26个科研工具
我们平时可以见到不少学术资源,但是很多信息里会有一些重叠网站、无效网站,导致我们虽然收藏了很多网址,但是却并不都能用,学妹特地整合了130个学术资源网站和26个科研工具,每一个都是亲自试过有效的,希望能…...

《一键搞定!揭秘微信公众号文章批量下载的终极神器》
大家好!今天我要给大家介绍一个超级好用的小工具,能帮你轻松批量下载微信公众号的文章,还不需要安装任何证书哦!无论你是学生还是普通爱好者,只要你想保存一些精彩的公众号内容,这个工具都能帮到你。 概览 …...

鸿蒙入门02-首次安装和配置
注:还没有安装编辑器( deveco studio )的小伙伴请看鸿蒙入门01-下载和安装-CSDN博客 首次安装配置 编辑器( deveco studio )安装完毕以后需要进入配置界面进行相关配置配置完毕以后才可以正常使用 环境配置…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...