flask web学习之flask与http(四)

这篇具有很好参考价值的文章主要介绍了flask web学习之flask与http(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、重定向进阶功能

1.1 重定向回上一个页面

有时候,我们在某些界面执行操作一些操作后,不希望界面跳转到其他指定网页上,而希望网页能重定向为用户刚才浏览的界面,以便继续完成操作,例如在某个页面需要登录后才能进行操作,我们希望登录后不跳转到主页界面,而是重定向为刚才操作的页面,从而能够方便的继续刚才未完成的操作。

  1. 获取上一个页面的URL
    要重定向为上一个页面,最关键的是要获取上一个页面的URL。获取的方法主要有两种:
  • HTTP referer
    是一个用来记录请求发源地址的HTTP首部字段,即访问来源。当用户在某个网站点击链接时,浏览器发送请求的数据中包含的HTTP_REFERER字段记录了用户所在的原站点URL。
    在Flask中,我们可以通过request.referrer进行获取。
return redirect(request.referrer)

# 为了防止用户出于隐私保护设置清除了或修改了该字段,添加备用选项
return redirect(request.referrer or url_for('index'))  
  • 查询参数
    除了从referer中获取之外,我们还可以在URL中手动加入包含当前页面URL的查询参数,一般命名为next
@app.route('/index')
def index():
	return '<a href="%s">登陆</a>' % url_for("login", next=request.full_path)


@app.route("/login")
def login():
	执行登陆操作......
	return rediect(request.args.get("next"))
	# 添加备选项
	return rediect(request.args.get("next"), url_for("index")))

通用重定向函数,避免重复代码

def redirect_back(default="hello", **kwargs):
	for target in request.args.get('next'), request.referrer:
		if target:
			return redirect(target)
	return redirect(url_for(default, **kwargs))

@app.route("/login")
def login:
	return redirect_back()
1.2 对URL进行安全验证

由于referer和next容易被篡改的特性,如果不对这些值进行验证,则会形成开放重定向漏洞。
URL验证函数

for urllib.parse import urlparse, urljoin
from flask import request

def is_safe_url(target):
	ref_url = urlparse(request.host_url)
	test_url = ulparse(urljoin(request.host_url, target))
	return test_url.scheme in ("http", "https") and ref_ul.netloc == test_url.netloc

# 在重定向通用代码中使用
def redirect_back(default="hello", **kwargs):
	for target in request.args.get('next'), request.referrer:
		if not target:
			continue
		if is_safe_ul(target):
			return redirect(target)
	return redirect(url_for(default, **kwargs))

这段代码定义了一个名为 is_safe_url() 的函数,用于判断给定的 URL 是否安全。

具体来说,is_safe_url() 函数接受一个参数 target,表示要检查的 URL。在函数体内,首先使用 urlparse() 函数从当前请求的 request.host_url 中解析出引用 URL(即当前页面的 URL),并将其赋值给 ref_url 变量。然后,使用 urljoin() 函数将 request.host_url 和 target 合并成完整的 URL,并使用 urlparse() 函数解析出测试 URL,并将其赋值给 test_url 变量。

最后,函数会判断 test_url 是否安全。具体来说,它会检查 test_url 的协议是否为 “http” 或 “https”,并且检查 test_url 的域名与 ref_url 的域名是否相同。如果这两个条件都满足,那么 is_safe_url() 函数将返回 True,表示 URL 是安全的;否则,返回 False,表示 URL 不安全。

二、使用Ajax技术发送异步请求

2.1 什么是Ajax

Ajax(Asynchronous JavaScript and XML)是一种在网页中使用的技术,通过在后台与服务器进行异步通信,实现页面内容的局部更新,而无需刷新整个页面。

传统的网页交互是同步的,即用户发起请求后,需要等待服务器返回完整的页面并刷新整个页面才能看到结果。而使用 Ajax 技术,可以在不刷新整个页面的情况下,通过发送异步请求,获取服务器返回的数据,并使用 JavaScript 动态更新页面的部分内容。

Ajax 基于以下几个核心的技术:

  • XMLHttpRequest 对象:用于在后台与服务器进行数据交换。通过创建 XMLHttpRequest 对象,可以发送请求和接收服务器返回的数据。
  • JavaScript 和 DOM 操作:通过 JavaScript 代码和 DOM(文档对象模型)操作,可以动态地修改页面的内容,将服务器返回的数据插入到指定的位置,更新页面的部分内容,而不需要刷新整个页面。
  • 异步请求和回调函数:Ajax 请求是异步的,意味着浏览器在发送请求后,不会阻塞页面的其他操作,而是继续执行后续的 JavaScript 代码。当服务器返回数据后,可以通过回调函数处理这些数据,更新页面或执行其他操作。

Ajax 技术它可以用于实现实时搜索、动态加载内容、表单验证、无刷新提交等功能。

2.2使用jQuery发送Ajax请求

jQuery中文网

并不一定需要使用jQuery来实现Ajax请求,可以使用原生的XMLHttpRequest,其它JavaScript框架内置的Ajax接口,或这使用更新的Fetch API来发送异步请求。

三、服务器推送

服务器推送(Server Push)是一种在客户端与服务器之间建立持久连接,并由服务器主动向客户端发送数据的通信方式。它与传统的客户端发起请求、服务器响应的模式不同,可以实现实时更新数据或推送通知给客户端,而无需客户端主动请求。
常见实现方式和协议:

名称 说明
传统轮询 在特定的时间内,客户端使用Ajax技术不断向服务器发起HTTP请求,然后获取的新的数据并更新页面。
长轮询 和传统相比,如果服务器一直没有返回数据,那就保持连接一直开启,直到有数据时才返回,取回数据后再次发送另一个请求。
Server-Sent Events(SSE) SSE 是一种基于 HTTP 的服务器推送技术。通过 SSE,服务器可以使用单向的持久连接向客户端发送数据。客户端通过 EventSource API 接收服务器发送的事件流,实现实时更新数据或接收通知。
WebSocket WebSocket 是一种支持全双工通信的网络协议,它提供了双向的持久连接,使得服务器可以主动向客户端发送数据。通过 WebSocket,服务器可以实时地将更新的数据或通知推送给客户端,而客户端也可以向服务器发送消息。

四、web安全规范

1. 注入攻击

重点注意SQL注入攻击文章来源地址https://www.toymoban.com/news/detail-775376.html

  • 原理:在编写SQL语句时,如果直接将用户传入的数据作为参数使用字符串拼接的方式插入SQL语句中,那么攻击者就可以通过注入其它语句来执行攻击操作,进行数据库增删改查。
  • 防范:使用orm,验证输入类型,参数化查询,转义特殊字符等。
2. XSS攻击
  • 原理:又称跨站脚本攻击,历史悠久,是注入攻击的一种,通过将代码注入被攻击者的网站中,用户一但访问就会执行被注入的恶意脚本。
  • 防范:HTML转义,验证用户输入
3. CSRF攻击
  • 原理:又称跨站伪造请求,利用用户已经通过身份验证的会话来执行未经授权的操作的攻击方式。攻击者通过欺骗用户访问恶意网站或点击恶意链接,利用用户的身份来发送伪造的请求。
  • 防范:使用正确的HTTP请求,csrf令牌校验。

到了这里,关于flask web学习之flask与http(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】Web学习笔记_flask(2)——get&post

    flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 POST请求 使用request.form可以接受表单数据 login.html模板: 获取用户名称、密码

    2024年02月14日
    浏览(31)
  • 【Python】Web学习笔记_flask(1)——get&post

    flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 POST请求 使用request.form可以接受表单数据 login.html模板: 获取用户名称、密码

    2024年02月14日
    浏览(28)
  • 【Python】Web学习笔记_flask(6)——会话&session对象

    处理利用cookie来判断用户登录外,也可以使用session来判断用户是否登录 html代码和cookie对象的设置相同    

    2024年02月12日
    浏览(33)
  • 【Python】Web学习笔记_flask(7)——Jinja2模板(1)

    Jinja2是基于python的模板引擎,功能类似于PHP的amarty、J2ee的Freemarker和velocity,完全支持Unicode,并具有集成的沙箱执行环境,Jinja2使用的事BSD协议,允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售。 渲染模板: 执行关键代码: 执行结果:  

    2024年02月11日
    浏览(31)
  • Flask框架小程序后端分离开发学习笔记《2》构建基础的HTTP服务器

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。本节提供一个构建简单的本地服务器的代码,仔细看注释,学习每一步的流程,理解服务器接收请求,回复响应的基本原理。 代码效果,运行之后,在浏览器输入:localhost:2000 总结 1.导入socket库:这个库

    2024年01月18日
    浏览(36)
  • 一、Flask学习之HTML

    首先需要搭建环境: app = Flask(__name__) : 创建了一个Flask应用实例, __name__ 参数表示当前模块的名称,通常用于确定资源的位置。 @app.route(\\\'/show/info\\\') : 这是一个装饰器,将下面的 index() 函数与指定的路由 /show/info 关联起来。当用户访问这个路由时,将执行 index() 函数。 运行会

    2024年01月21日
    浏览(25)
  • 二、Flask学习之CSS

    1.1 直接在标签中添加 1.2 在头部添加 1.3 单独在文件添加 mycss.css html文件: 上面三种表示的结果是一样的。 CSS有多种选择器: ID选择器(使用#) 类选择器(使用.) 标签选择器 效果: 属性选择器 后代选择器 3.1高度和宽度 宽度是可以支持百分比的 div 等块级标签默认是有效

    2024年01月20日
    浏览(24)
  • 四、Flask学习之JavaScript

    JavaScript ,作为一种前端脚本语言,赋予网页生动的交互性和动态性。通过它,开发者能够操作DOM(文档对象模型)实现页面元素的动态改变、响应用户事件,并借助AJAX技术实现异步数据请求,为用户提供更流畅的浏览体验。在现代Web开发中,JavaScript不仅是构建丰富用户界面

    2024年01月24日
    浏览(28)
  • Python Flask Web + PyQt 前后端分离的项目—学习成绩可视化分析系统

    使用工具: Python,PyQt ,Flask ,MySQL 注:制作重点在网页端,因此网页端的功能更全 WEB界面展示: 系统登录分为管理员,老师,学生3部分 管理员统一管理所有的账号信息以及登录信息 老师管理,添加,修改班级,学生的成绩信息 学生只能查看成绩信息,不能做出修改    

    2024年02月20日
    浏览(47)
  • Python-web开发学习笔记(3):Flask Demo,一个网站开发小案例

    ☕️ 推荐关注我的另一个专栏系列:大道至简,该系列收录了许多优质的人工智能算法博文,包括机器学习和自然语言处理等,持续更新中,欢迎各位关注~   介绍完Python-web开发学习笔记(2)--- HTML基础_尚拙谨言的博客-CSDN博客,我们来搞一个简单的网站小案例,带大家更进

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包