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

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

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

相关文章

进程和线程的区别和联系

目录 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 创建与销毁&#xff1a; 独立性&#xff1a; 线程&#xff08;Thread&#xff09;&#xff1a; 联系和区别 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 进程是程序执行…

【待解决】Could not find encoder for codec_id=27,opencv-python 保存H264格式的错误记录

【待解决】Could not find encoder for codec_id27&#xff0c;opencv-python 保存H264格式的错误记录 代码 cv2.VideoWriter(vide_save_path, cv2.VideoWriter_fourcc(*avc1), fps, (width, height))报错 [ERROR:039.657] global cap_ffmpeg_impl.hpp:3130 open Could not …

超越GPT-4V,苹果多模态大模型上新,神经网络形态加速MLLM(一)

4月8日&#xff0c;苹果发布了其最新的多模态大语言模型&#xff08;MLLM &#xff09;——Ferret-UI&#xff0c;能够更有效地理解和与屏幕信息进行交互&#xff0c;在所有基本UI任务上都超过了GPT-4V&#xff01; 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

【触想智能】如何选购到一款合适的工业电脑一体机

工业电脑一体机是专为工业环境而设计的一种工业计算机。工业电脑一体机和普通的计算机不一样&#xff0c;它对产品的参数性能要求很高&#xff0c;因为它们通常会运行在高低温、电磁干扰、高粉尘、湿度大的恶劣环境中&#xff0c;所以相应的要求工业电脑一体机必须具备良好的宽…

UE5下载与安装

官方网站&#xff1a;https://www.unrealengine.com/zh-CN 1、下载启动程序安装包。 登录官网后&#xff0c;点击首页右侧下载按钮下载Epic Games启动程序的安装包&#xff0c;如下图&#xff1a; 2、安装启动程序。 双击步骤1所下载安装软件&#xff0c;如下图&#xff1a;…

华为校招机试 - 健康餐(20240410)

题目描述 某减肥食堂,每一份菜都标记了卡路里。 一位顾客,根据营养师的建议,每次饮食都要将卡路里控制在一定区间内(含上下限的值),请问 他有多少种选择? 为了简单起见,每份菜的卡路里用整数表示,且每份菜的卡路里数各不相同; 同一个菜品可以打任意多份。 输入描…

vivado AXI 接口事件

AXI 接口事件 在 Vivado 硬件管理器中 &#xff0c; 如果使用 System ILA IP 对设计 AXI 接口进行调试 &#xff0c; 那么“波形 (Waveform) ”窗口会显示对 应于 System ILA 所探测的接口的接口插槽、事件和信号组。正如下图所示 &#xff0c; “ Waveform ”窗口会显示…

中立分析腾讯云故障相关的事件

最近腾讯云的故障&#xff0c;让一堆云计算爱好者兴奋地远看指点江山、近看沐猴而冠。我比这群爱好者们更了解云计算&#xff0c;但是我尊重我的读者&#xff0c;你们从我这里看到的科普信息&#xff0c;不仅仅只有情绪价值。 在信息爆炸的时代&#xff0c;大家关注和信任某个媒…

探索人工智能:AI如何改变我们的工作和生活

人工智能&#xff08;AI&#xff09;技术的迅猛发展正逐步改变我们的工作方式和生活习惯。从自动化和数据分析到增强决策和个性化服务&#xff0c;AI的应用范围广泛&#xff0c;其潜力巨大。以下是AI如何在各个方面改变我们的工作和生活的一些关键领域&#xff1a; ### 工作领…

三道模拟题

P1003 [NOIP2011 提高组] 铺地毯 题目描述 原题点这里-->P1003 [NOIP2011 提高组] 铺地毯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺…

【Redis 神秘大陆】007 安全监控

七、Redis 安全&监控 当你发现这些内容对你有帮助时&#xff0c;为了支持我的工作&#xff0c;不妨给一个免费的⭐Star&#xff0c;这将是对我最大的鼓励&#xff01;感谢你的陪伴与支持&#xff01;一起在技术的路上共同成长吧&#xff01;点击链接&#xff1a;GitHub | …

【C++】哈希一

这篇博客要说的是哈希算法&#xff0c;哈希又称为散列&#xff0c;它是将存储的值和存储的位置建立起关联关系的一种算法&#xff0c;或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢&#xff1f;我们来看一个例子&#xff1a;比如说我们要存储1&#xf…

excel试题转word格式

序号试题选项答案 格式如上。输出后在做些适当调整就可以。 import pandas as pd from docx import Document from docx.shared import Inches# 读取Excel文件 df pd.read_excel(r"你的excel.xlsx")# 创建一个新的Word文档 doc Document()# 添加标题 doc.add_headi…

【SLAM】在Win10上实现Nerf-Pytorch【GPU版】

文章目录 ReadMe安装依赖运行下载两个示例数据集:lego和fern训练一个低分辨率的Lego NeRF:训练一个低分辨率蕨类植物NeRF:更多数据集预训练模型可复现实现1、下载nerf-pytorch工程2、安装依赖3、下载数据4、运行lego NeRF:ReadMe Github链接 NeRF (神经辐射场)是一种在合成…

基于变压器的手持式超声图像中乳腺病变的分类不一致性测量表征

超声成像作为一种替代的低成本、易于获取的非电离成像方式已显示出巨大的前景&#xff0c;可用于乳腺癌筛查。特别是&#xff0c;随着最近便携式设备的出现&#xff0c;超声检查预计将在中低收入国家中越来越普及。然而&#xff0c;超声成像在乳腺癌诊断中的可靠性高度依赖于操…

如何防范XSS?

XSS&#xff08;跨站脚本攻击&#xff09;通常通过注入恶意脚本到其他用户的浏览器中来实现。为了防范XSS&#xff0c;您可以采取以下措施&#xff1a; 输入验证&#xff1a;对所有用户输入进行验证&#xff0c;确保其内容符合预期的格式和类型。例如&#xff0c;如果您正在构建…

竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

Java基础入门day33

day33 html 表单 表单实现与用户的可交互操作 表单可以用来收集用户输入信息 form表单标签&#xff0c;可以在页面上添加一个表单元素&#xff0c;表单本身没有边界 属性action&#xff0c;目标地址&#xff0c;表单提交后要跳转的对应的url地址 属性method&#xff1a; get…

【数据结构|C语言版】双向链表

前言1. 初步认识双向链表1.1 定义1.2 结构1.3 储存 2. 双向链表的方法&#xff08;接口函数&#xff09;2.1 动态申请空间2.2 创建哨兵位2.3 查找指定数据2.4 指定位置插入2.5 指定位置删除2.6 头部插入2.7 头部删除2.8 尾部插入2.9 尾部删除2.10 计算链表大小2.11 销毁链表 3.…

【LeetCode热题100】【贪心算法】划分字母区间

题目链接&#xff1a;763. 划分字母区间 - 力扣&#xff08;LeetCode&#xff09; 要将一个字符串划分为多个子串&#xff0c;要求每个字母只能出现在一个子串里面 如果一个字母的当前位置是它在这个字符串里面最后一次出现的位置&#xff0c;那么这里就应该划分出来成为子串…