flask框架

news/2024/9/18 15:45:50/ 标签: flask, python, 后端

Flask

flask_2">1 flask简介

我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开,功臣在与tomcat。python语言写的项目,转换为web,Flask框架

轻量级web应用框架。

环境准备:

python">pip install flask

2 项目

flask_16">2.1 创建一个flask对象

创建一个flask程序对象,当客户端发送消息到web服务器时,web服务器可以把消息给Flask实例。

python">app = Flask(__name__)
python_24">2.2 构造实例对象从url到python函数的映射关系
python">@app.route('/login')
def login():return "你好,欢迎到来"
2.3 启动服务
python">app.run(debug=True, port=8899)
2.4 案例
python">from flask import Flask# step1:创建一个应用实例
app = Flask(__name__)   # step2:url到python视图函数的映射关系---添加静态路由
@app.route('/login')
def login():return "你好,欢迎到来"# step3:启动服务
# debug:调试模式打开
# port:随便写一个,要求当前端口没有占用
app.run(debug=True, port=8899)

运行后浏览器访问效果:

image-20210930111144237

3 路由

<name>

路由分类:

  • 静态路由:在app.route(urel地址)不带参数的
  • 动态路由:在app.route(url地址/<name>),带参数的

动态路由案例:

python">"""动态路由
"""from flask import Flaskapp = Flask(__name__)# 动态路由登录
# 密码设置为整数
@app.route('/login/<username>/<int:password>')
def login(username,password):return f"你好{username},欢迎到来"if __name__ == '__main__':app.run(debug=True, port=8899)

运行结果:

image-20210930112609676

4 http的请求和响应

4.1 请求

请求的方法:

a)request.method : 获取本次请求的请求方式(GET / POST等)

b)request.headers:获取请求信息头的相关信息

c)request.path:获取请求的资源具体路径(不带参数)

d)request.full_path:获取完整的请求资源具体路径(带参数)

e)request.url: 获取完整的请求地址,从协议开始

f)request.args : 获取以get请求方式提交的数据

g)request.form : 获取以post请求方式提交的数据

h)request.files:获取上传的文件,用save进行保存

i)request.cookies:获取cookies中的相关信息

案例:

python">"""
请求
"""from flask import Flask,requestapp = Flask(__name__)# 动态路由登录
@app.route('/login/<username>/<int:password>')
def login(username,password):print(f"请求头为:{request.headers.get('Accept-Encoding')}")print(f"请求的url为:{request.path}")print(f"请求的url为:{request.full_path}")print(f"请求的method:{request.method}")return f"你好{username},欢迎到来"if __name__ == '__main__':app.run(debug=True, port=8899)

结果如下:

python">请求头为:gzip, deflate, br
请求的url为:/login/admin/123		# 路径
请求的url为:/login/admin/123?		# 全路径= 路径 + params
请求的method:GET

案例:发送带get请求数据的url

python">"""
带get参数的服务
"""
"""
请求
"""from flask import Flask,requestapp = Flask(__name__)# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]return f"你发送的get请求的参数为:{username},{pwd},你好,欢迎到来"if __name__ == '__main__':app.run(debug=True, port=8899)

发送请求:

image-20210930115220028

4.2 响应

响应分类:

  • 数据响应:文本响应,比如login-pass;json响应,比如会员查询的结果,一条会员信息就是json串中的一个成员
  • 页面响应:返回就是一个页面,就是视图函数

文本响应案例:

python">"""
返回文本
"""from flask import Flask,requestapp = Flask(__name__)# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]content = f"你发送的get请求的参数为:{username},{pwd},你好,欢迎到来"return content      # 返回文本if __name__ == '__main__':app.run(debug=True, port=8899)

json响应案例:

"""
返回json
"""from flask import Flask, request, jsonifyapp = Flask(__name__)# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]data = {"username": username, "password": pwd}return jsonify(data)        # 返回结果为json串if __name__ == '__main__':app.run(debug=True, port=8899)

运行结果:

image-20210930121715374

视图响应案例:

python">"""
返回视图函数
1. 通过get访问首页
2. 显示输入用户名和密码后,点击登录触发post请求
3. 返回post的信息
4. 输入错误的信息:给出一个链接,可以提示点击后重新登录?
"""from flask import Flask, request, jsonifyapp = Flask(__name__)# get请求
# 获取登录页面
# 输入信息,点击登录
# 登录成功
@app.route('/login.html', methods=['GET','POST'])
def login():str = '''
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h2>用户登录</h2>
<form action="/login.html" method="post">用户名:<input name="username" placeholder="请输入用户名"><br>密  码:<input name="password" placeholder="请输入密码"><br><input type="submit" name="login" value="登录"><br>
</form>
</body>
</html>'''if request.method == "GET":return str        # 返回结果为json串else:input_username = request.form.get("username")       # 获取输入框输入的用户名input_password = request.form.get("password")       # 获取输入框输入的密码if input_username=="admin" and input_password == '123':return r"登录成功<br><img src='e:\aaa.jpg'>"else:return "<h1>登录失败<a href='/login.html'>请重新登录</a></h1>"if __name__ == '__main__':app.run(debug=True, port=8899)
4.3 make_response构造响应结果

make_response()有三个参数:

  • 字符串
  • 状态码
  • 响应头

登录成功,响应200,并且把用户的信息添加到响应头中,如果失败,就返回400的错误案例:

python">"""
make_response
登录
"""from flask import Flask, request, jsonify,make_responseapp = Flask(__name__)
app.config["JSON_AS_ASCII"] = False# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]if username == 'admin' and pwd == '123':response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,{"userinfo": "username={};password={}".format(username,pwd)})else:response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)return responseif __name__ == '__main__':app.run(debug=True, port=8899)

运行结果:

image-20210930150436454

5 模拟项目

一个完整的flask项目是分为三个部分的:

  • static:css、图片
  • templates:html
  • run.py:服务

案例如图所示:

image-20210930151126052

6 cookie和session

6.1 cookie

cookie的相关的方法:

  • 设置cookie:response.set_cookie(key, value, mas_age=)
  • 获取cookie:response.get_cookie(key)
  • 删除cookie:response.get_cookie()

在一个demo中创建两个视图函数,一个是登录的,如果登录成功,我们就把cookie添加到浏览器中,一个是homt/page视图,如果有cookie那么就显示欢迎光临,如果没有cookie就显示请去登录:

python">"""
make_response
登录
"""from flask import Flask, request, jsonify,make_responseapp = Flask(__name__)
app.config["JSON_AS_ASCII"] = False# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]if username == 'admin' and pwd == '123':response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,{"userinfo": "username={};password={}".format(username,pwd)})# 如果登录成功,就去设置cookie,将登录的用户名和密码放进cookieresponse.set_cookie("username", username, max_age=60)response.set_cookie("password", pwd, max_age=60)else:response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)return response@app.route('/home',methods=['GET'])
def homepage():#获取cookie里面的用户名username = request.cookies.get("username")if username:response = make_response('<h1>{},欢迎你来到首页!</h1>'.format(username))else:response = make_response('<h1>亲,你还没有登录哦!</h1>')return responseif __name__ == '__main__':app.run(debug=True, port=8899)

登录成功如图:

image-20210930153406067

6.2 session

session拥有的方法有三个:

  • 设置session:session[key] = value
  • 获取session:session.get[key]
  • 删除session:del session ; session.pop[key]

在一个demo中创三个视图函数,一个是登录的,如果登录成功,我们就把session添加到浏览器中,一个是homt/page视图,如果有session那么就显示欢迎光临,如果没有session就显示请去登录,一个是logout视图,用来清除session,代码如下:

python">"""
在一个demo中创三个视图函数,一个是登录的,
如果登录成功,我们就把session添加到浏览器中,一个是homt/page视图,
如果有session那么就显示欢迎光临,如果没有session就显示请去登录,
一个是logout视图,用来清除session
"""
import osfrom flask import Flask, request, jsonify, make_response, sessionapp = Flask(__name__)
app.config["JSON_AS_ASCII"] = False
app.secret_key = os.urandom(24)# get请求
@app.route('/login', methods=['GET'])
def login():username = request.args["username"]pwd = request.args["password"]if username == 'admin' and pwd == '123':response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,{"userinfo": "username={};password={}".format(username,pwd)})# 如果登录成功,就去设置session,将登录的用户名和密码放进sessionsession['username'] = usernamesession['password'] = pwdelse:response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)return response@app.route('/home',methods=['GET'])
def homepage():#获取session里面的用户名username = session.get("username")if username:response = make_response('<h1>{},欢迎你来到首页!</h1>'.format(username))else:response = make_response('<h1>亲,你还没有登录哦!</h1>')return response@app.route('/logout',methods=['GET'])
def logout():rsp = make_response(jsonify({"msg": "暂未登录"}))#如果存在cookie,清除session里面的值if session.get("username") and session.get("password"):session.pop('username')session.pop('password')rsp = make_response(jsonify({"success": True, "msg": "退出成功"}))return rspif __name__ == '__main__':app.run(debug=True, port=8899)

运行结果:

image-20210930155251107


http://www.ppmy.cn/news/1526236.html

相关文章

基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标&#xff1a; 当我的手指在设备左方进行上下移动的时候&#xff0c;可以进行屏幕亮度的调节&#xff0c;在调节的同时&#xff0c;有实时的调节进度条显示 步骤&#xff1a; 界面逻辑&#xff1a;使用Stack() 组件&#xff0c;完成音量图标和进度条的组合显示&#xff0c…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用&#xff0c;功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时&#xff0c;要传结构体地址。 75.位段 76.static是只能在该文件中看到&#xff0c;其他地方看不到 77.…

通俗理解矩阵的秩

通俗理解矩阵的秩 flyfish 一、通俗的理解 想象有一张表格&#xff08;矩阵&#xff09;&#xff0c;表格里有很多数字。矩阵的秩告诉我们这个表格里的数据有多么“特别”或者“复杂”。 1. 行和列的概念&#xff1a; 矩阵是由行&#xff08;横排的数字&#xff09;和列&a…

vue + Lodop 制作可视化设计页面 实现打印设计功能(四)

历史&#xff1a; vue2 Lodop 制作可视化设计页面 实现打印设计功能&#xff08;一&#xff09; vue Lodop 制作可视化设计页面 实现打印设计功能&#xff08;二&#xff09; vue Lodop 制作可视化设计页面 实现打印设计功能&#xff08;三&#xff09; 前言&#xff1a…

uniapp vue3 梯形选项卡组件

实现的效果图&#xff1a; 切换选项卡显示不同的内容&#xff0c;把这个选项卡做成了一个组件&#xff0c;需要的自取。 // 组件名为 trapezoidalTab <template> <view class"pd24"><view class"nav"><!-- 左侧 --><view cla…

web基础之文件上传

1.下载安装 下载地址 链接&#xff1a;百度网盘-链接不存在 提取码&#xff1a;jhks 安装 直接把他放在phpstudy的WWW目录中。&#xff08;phpstudy的下载安装&#xff0c;可以自行百度一下&#xff09; 打开 访问地址&#xff1a;127.0.0.1/upload-labs 问题 这里可能…

MCU与SOC的区别

自动驾驶中 MCU 与 SoC 的区别 在自动驾驶系统中&#xff0c;**MCU&#xff08;微控制单元&#xff0c;Microcontroller Unit&#xff09;和SoC&#xff08;系统级芯片&#xff0c;System on Chip&#xff09;**都是关键的电子元件&#xff0c;但它们在性能、功能和应用领域等…

MATLAB在嵌入式系统设计中的最佳实践

嵌入式系统设计是一个复杂的过程&#xff0c;涉及硬件和软件的紧密集成。MATLAB提供了一套全面的解决方案&#xff0c;从算法开发到代码生成&#xff0c;再到硬件验证&#xff0c;极大地简化了这一过程。本文将探讨使用MATLAB进行嵌入式系统设计的最佳实践&#xff0c;包括模型…

10分钟在钉钉上增加一个AI机器人

您只需 10 分钟&#xff0c;无需任何编码&#xff0c;即可为您的组织在钉钉平台上创建一个有大模型能力加成的 AI 机器人。这个机器人可以全天候&#xff08;7x24&#xff09;响应用户咨询&#xff0c;还能解答私域问题&#xff0c;成为您业务的专属机器人&#xff0c;提升用户…

时序数据库 TDengine 的入门体验和操作记录

时序数据库 TDengine 的学习和使用经验 什么是 TDengine &#xff1f;什么是时序数据 &#xff1f;使用RPM安装包部署默认的网络端口 TDengine 使用TDengine 命令行&#xff08;CLI&#xff09;taosBenchmark服务器内存需求删库跑路测试 使用体验文档纠错 什么是 TDengine &…

k8s service如何实现流量转发

1 基本概念 Service&#xff1a;在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Service用于将流量转发到后端的Pod中。Service提供了一种稳定的网络入口&#xff0c;尽管后端的Pod可能会动态改变 kube-proxy: kube-proxy是Kubernetes集群中的核心组件之一&#xff0…

C++:opencv多边形逼近二值图轮廓--cv::approxPolyDP

cv::approxPolyDP 是 OpenCV 中一个用于多边形逼近的函数。它通过 Douglas-Peucker 算法将复杂的轮廓简化为更少的点&#xff0c;这在图像处理和计算机视觉中非常有用。例如&#xff0c;简化的轮廓可以帮助提高形状分析和轮廓检测的效率。 函数原型 void cv::approxPolyDP(co…

基于Python的自然语言处理系列(9):使用TorchText与预训练词嵌入进行新闻分类

在前一篇文章中&#xff0c;我们展示了如何使用TorchText和RNN进行新闻分类。在这篇文章中&#xff0c;我们将改进之前的模型&#xff0c;通过使用预训练词嵌入、优化器的更改、正交初始化以及打包填充序列的技巧&#xff0c;提升模型的学习效率和效果。 1. 改进方向 提高模型…

计算机网络八股总结

这里写目录标题 网络模型划分&#xff08;五层和七层&#xff09;及每一层的功能五层网络模型七层网络模型&#xff08;OSI模型&#xff09; 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址&#xff0c;子…

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一&#xff1a;效果图 二&#xff1a;添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三&#xff1a;下载&#xff0c;保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…

笔记共享平台|基于Java+vue的读书笔记共享平台系统(源码+数据库+文档)

笔记共享平台|读书笔记共享平台系统 目录 基于Javavue的读书笔记共享平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

林草湿地址、导出echart为word

2.导出 // 导出exportDoc () {this.loading truelet arrRefs [this.$refs.endChart, this.$refs.processChart, this.$refs.officeEndChart]setTimeout(() > {Promise.all(arrRefs.map((canvasDom) > {return this.html2canvasHandle(canvasDom)})).then(res > {let…

系统架构设计师 需求分析篇一

&#x1f4d8; 结构化分析SA 思想 自顶向下&#xff1a;像剥洋葱一样&#xff0c;层层深入&#xff0c;大问题拆成小问题&#xff0c;再拆成更小的问题。 核心模型 数据字典 &#x1f4d4;&#xff1a;记录数据元素的点点滴滴&#xff0c;从属性到使用方式&#xff0c;无所…

音视频开发常见的开源项目汇总

FFmpeg 地址&#xff1a;https://ffmpeg.org/介绍&#xff1a;FFmpeg 是一个非常强大的开源多媒体框架&#xff0c;它可以用来处理视频和音频文件。它支持多种格式的转换、编码、解码、转码、流处理等。FFmpeg 包括了 libavformat、libavcodec、libavutil、libswscale、libpos…

实时监控分析广告数据跳转统计平台源码

广告跳转实时分析页面统计系统&#xff0c;可选择生成html页面样式&#xff0c;可自定义设置页面域名后缀&#xff0c;可指定跳转指定网址&#xff0c; 可记录单个页面的访问记录&#xff0c;可对生成的单个链接进行备注&#xff0c;自定义等待时间进行跳转。 源码下载&#…