flask框架

Flask

1 flask简介

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

轻量级web应用框架。

环境准备:

pip install flask

2 项目

2.1 创建一个flask对象

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

app = Flask(__name__)
2.2 构造实例对象从url到python函数的映射关系
@app.route('/login')
def login():return "你好,欢迎到来"
2.3 启动服务
app.run(debug=True, port=8899)
2.4 案例
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>),带参数的

动态路由案例:

"""动态路由
"""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中的相关信息

案例:

"""
请求
"""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)

结果如下:

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

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

"""
带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串中的一个成员
  • 页面响应:返回就是一个页面,就是视图函数

文本响应案例:

"""
返回文本
"""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

视图响应案例:

"""
返回视图函数
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的错误案例:

"""
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就显示请去登录:

"""
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,代码如下:

"""
在一个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.mzph.cn/bicheng/54184.shtml

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

相关文章

【C语言】内存函数详细讲解

文章目录 前言strerror的声明和使用字符串分类函数字符转换函数内存拷贝函数&#xff08;memcpy)memcpy的声明和使用memcpy函数的模拟实现 内存拷贝函数&#xff08;memmove&#xff09;memmove的声明和使用memmove模拟实现 内存比较函数&#xff08;memcmp&#xff09;memcmp的…

UDP_SOCKET编程实现

文章目录 socket编程接口认识struct sockaddr类 编写一个server服务Client代码查看启动结果代码修正1.获取内核分配给客户端的信息2.修正不匹配ip不能访问的问题 不同机器之间的通信利用xftp将udp_client传给wsl的ubuntu机器进行演示现在模拟在windows下的udp_client代码: 对方…

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现BKA-XGBoost时间序列预测&a…

WPF UpdateSourceTrigger属性

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;UpdateSourceTrigger 是一个属性&#xff0c;通常用于数据绑定中&#xff0c;它控制着何时将绑定目标&#xff08;即UI元素&#xff09;的值更新到绑定源&#xff08;即数据对象&#xff09;。当UI…

Go语言现代web开发08 if和switch分支语句

if语句 If is the most common conditional statement in programming languages. If the result of the condition caculation is positive(true), the code inside if statement will be executed. In the next example, value a will be incremented if it is less than 10…

《黑神话:悟空》:中国游戏界的新篇章

引言&#xff1a; 在数字娱乐的浪潮中&#xff0c;游戏已成为连接全球文化的重要媒介。 《黑神话&#xff1a;悟空》的问世&#xff0c;不仅是中国游戏产业的一个里程碑&#xff0c;更是文化自信的闪耀展现。 这款游戏以其独特的艺术风格和深刻的文化内涵&#xff0c;在全球范…

k8s中的认证授权

目录 一、kubernetes API 访问控制 1.1 UserAccount与ServiceAccount 1.1.1 ServiceAccount 1.1.2 ServiceAccount示例 二、认证(在k8s中建立认证用户) 2.1 创建UserAccount 2.2 RBAC&#xff08;Role Based Access Control&#xff09; 2.2.1 基于角色访问控制授权&…

RT-DETR改进策略:BackBone改进|使用StarNet改进RT-DERT,显著提升性能与效率

摘要 本文介绍了我们如何将最新的StarNet模型成功应用于实时目标检测任务中,特别是用于改进RT-DERT(一种高效的实时目标检测网络)的主干网络部分。通过详尽的实验和理论分析,我们证明了StarNet不仅能够显著增强RT-DERT的检测精度,同时保持了高效的计算性能和低延迟特性。…

C++从入门到起飞之——继承下篇(万字详解) 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、派⽣类的默认成员函数 1.1 四个常⻅默认成员函数 1.2 实现⼀个不能被继承的类 ​编辑 2. 继承与友…

力扣题解2390

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述​&#xff08;中等&#xff09;&#xff1a; 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中&#xff0c;你可以&#xff1a; 选中 s 中的一个星号。 移除星号…

力扣刷题(6)

两数之和 II - 输入有序数组 两数之和 II - 输入有序数组-力扣 思路&#xff1a; 因为该数组是非递减顺序排列&#xff0c;因此可以设两个左右下标当左右下标的数相加大于target时&#xff0c;则表示右下标的数字过大&#xff0c;因此将右下标 - -当左右下标的数相加小于targ…

HashMap线程不安全|Hashtable|ConcurrentHashMap

文章目录 常见集合线程安全性HashMap为什么线程不安全&#xff1f;怎么保证HashMap线程安全 HashtableConcurrentHashMap 引入细粒度锁代码中分析总结 小结 常见集合线程安全性 ArrayList、LinkedList、TreeSet、HashSet、HashMap、TreeMap等都是线程不安全的。 HashTable是线…

C语言:数组

1. 数组的概念 数组是⼀组相同类型元素的集合&#xff1b;从这个概念中我们就可以发现2个有价值的信息&#xff1a; • 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。 • 数组中存放的多个数据&#xff0c;类型是相同的。 数组分为⼀维数组和多维数组…

【C语言必学知识点七】你知道在动态内存管理中存在的内存泄露问题吗?遇到内存泄露时应该如何处理?今天跟你好好介绍一下如何正确使用calloc与realloc!!!

动态内存管理——动态函数&#xff08;calloc、realloc&#xff09;的使用 导读一、calloc函数1.1 函数介绍1.2 calloc的使用1.3 calloc与malloc 二、realloc函数2.1 函数介绍2.2 realloc的使用2.3 realloc的空间分配2.3.1 空间分配成功——地址的改变2.3.2 空间分配失败——内…

【在Linux世界中追寻伟大的One Piece】数据链路层

目录 1 -> 数据链路层 2 -> 对比理解“数据链路层”和“网络层” 3 -> 以太网 3.1 -> 以太网的帧格式 4 -> 认识MAC地址 4.1 -> 对比理解MAC地址和IP地址 5 -> 认识MTU 5.1 -> MTU对IP协议的影响 5.2 -> MTU对UDP协议的影响 5.3 -> MT…

ElasticSearch介绍+使用

ElasticSearch 1.背景 ElasticSearch的最明显的优势在于其分布式特性&#xff0c;能够扩展到上百台服务器&#xff0c;极大地提高了服务器的容错率。在大数据时代背景下&#xff0c;ElasticSearch与传统的数据库相比较&#xff0c;能够应对大规模的并发搜索请求&#xff0c;同…

JavaScript网页设计案例分析

JavaScript网页设计案例分析 随着互联网技术的发展&#xff0c;JavaScript 已经成为现代网页设计中不可或缺的一部分。从简单的页面交互到复杂的应用程序开发&#xff0c;JavaScript 都发挥着至关重要的作用。本文将探讨几个运用 JavaScript 进行网页设计的经典案例&#xff0…

使用Python实现多个PDF文件的合并

使用Python可以很方便地实现多个PDF文件的合并。我们可以使用PyPDF2库来完成这个任务。以下是一个实现PDF合并的Python脚本&#xff1a; import os from PyPDF2 import PdfMergerdef merge_pdfs(input_dir, output_filename):# 创建一个PdfMerger对象merger PdfMerger()# 获取…

UE5源码Windows编译、运行

官方文档 Welcome To Unreal Engine 5 Early Access Learn what to expect from the UE5 Early Access program. 链接如下&#xff1a;https://docs.unrealengine.com/5.0/en-US/Welcome/#gettingue5earlyaccessfromgithub Step 0&#xff1a;找到UE5源码 直接先上链接 https…

【Qt】Qml界面中嵌入C++ Widget窗口

1. 目的 qml做出的界面漂亮&#xff0c;但是执行效率低&#xff0c;一直想找一个方法实现qml中嵌入c界面。现在从网上找到一个方法&#xff0c;简单试了一下貌似可行&#xff0c;分享一下。 2. 显示效果 3. 代码 3.1 工程结构 3.2 pro文件 需要添加widgets > QT quick …