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 )安装完毕以后需要进入配置界面进行相关配置配置完毕以后才可以正常使用 环境配置…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
