flask web 笔记 路由(flask webapi)
路由介绍
现代 Web 应用程序使用有意义的 URLs 去帮助用户。如果一个网站使用有意义的 URL 能够让用户记住并且直接访问这个页面,那么用户会更有可能再一次访问该网站。
正如上面所说,route 装饰器是用于把一个函数绑定到一个 URL 上。修改 /home/home/Code/hello.py 文件的代码如下所示
终端执行如下命令启动服务:
访问地址 http://127.0.0.1:5000,浏览器页面会显示 Index Page;如果访问地址 http://127.0.0.1:5000/hello,浏览器页面会显示 Hello, World!。这样就实现了通过访问不同的 URL 地址从而响应不同的页面。
可以在一个函数上绑定多个不同的规则。
变量规则
为了给 URL 增加变量的部分,你需要把一些特定的字段标记成<variable_name>。这些特定的字段将作为参数传入到你的函数中。当然也可以指定一个可选的转换器通过规则<converter:variable_name>将变量值转换为特定的数据类型。 在 /home/home/Code/hello.py 文件中添加如下的代码:
按照前面的方式启动应用,逐个访问地址:
当访问 http://127.0.0.1:5000/user/I love you 时,页面显示为
当访问 http://127.0.0.1:5000/post/3 时,页面显示为 Post 3。用户在浏览器地址栏上输入的都是字符串,但是在传递给 show_post 函数处理时已经被转换为了整型。
当访问 http://127.0.0.1:5000/path/file/A/a.txt 时,页面显示为 Subpath file/A/a.txt。
转换器的主要类型如下:
唯一 URLs / 重定向行为
Flask 的 URL 规则是基于 Werkzeug 的 routing 模块。该模块背后的思路是基于 Apache 和早期的 HTTP 服务器定下先例确保优雅和唯一的 URL。
以这两个规则为例,在 /home/home/Code/hello.py 文件中添加如下的代码:
@app.route('/projects/') def projects(): return 'The project page' @app.route('/about') def about(): return 'The about page' 虽然它们看起来确实相似,但它们结尾斜线的使用在 URL 定义中不同。
第一种情况中,规范的 URL 指向 projects 尾端有一个斜线/。这种感觉很像在文件系统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范 URL 去。当访问 http://127.0.0.1:5000/projects/ 时,页面会显示 The project page。
然而,第二种情况的 URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。此时如果访问结尾带斜线的 URL 会产生一个404 “Not Found”错误。当访问 http://127.0.0.1:5000/about时,页面会显示 The about page;但是当访问 http://127.0.0.1:5000/about/ 时,页面就会报错 Not Found。
当用户访问页面忘记结尾斜线时,这个行为允许关联的 URL 继续工作,并且与 Apache 和其它的服务器的行为一致,反之则不行,因此在代码的 URL 设置时斜线只可多写不可少写;另外,URL 会保持唯一,有助于避免搜索引擎索引同一个页面两次。
构建 URL
去构建一个 URL 来匹配一个特定的函数可以使用 url_for() 方法。它接受函数名作为第一个参数,以及一些关键字参数,每一个关键字参数对应于 URL 规则的变量部分。未知变量部分被插入到 URL 中作为查询参数。
为什么你要构建 URLs 而不是在模版中硬编码呢?这里有几个理由:
- 反向构建通常比硬编码更具备描述性。
- 它允许你一次性修改 URL,而不是到处找 URL 修改。
- 构建 URL 能够显式地处理特殊字符和Unicode转义,因此你不必去处理这些。
- 如果你的应用不在 URL 根目录下(比如,在 /myapplication 而不在 /),url_for()将会适当地替你处理好。
在 Python shell 交互式命令行下运行如下代码:
(记得切回myproject对应目录)
$ python3 >>> from flask import Flask, url_for >>> app = Flask(__name__) >>> @app.route('/') ... def index(): ... return 'index' ... >>> @app.route('/login') ... def login(): ... return 'login' ... >>> @app.route('/user/<username>') ... def profile(username): ... return '{}\'s profile'.format(username) ... >>> with app.test_request_context(): ... print(url_for('index')) ... print(url_for('login')) ... print(url_for('login', next='/')) ... print(url_for('profile', username='John Doe')) ... / /login /login?next=%2F # 对字符串进行了转义,未知变量部分被当做查询参数 /user/John%20Doe test_request_context() 方法告诉 Flask 表现得像是在处理一个请求,即使我们正在通过 Python shell 交互。大家可以仔细分析一下该函数的打印结果。
HTTP 方法
HTTP (也就是 Web 应用协议) 有不同的方法来访问 URLs 。默认情况下,路由只会响应 GET 请求,但是能够通过给 route() 装饰器提供 methods 参数来改变。这里是一个例子:
@app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': do_the_login() # 如果是 POST 方法就执行登录操作 else: show_the_login_form() # 如果是 GET 方法就展示登录表单 如果使用 GET 方法,HEAD 方法将会自动添加进来。你不必处理它们。也能确保 HEAD 请求会按照 HTTP RFC (文档在 HTTP 协议里面描述) 要求来处理,因此你完全可以忽略这部分 HTTP 规范。同样地,自从 Flask 0.6 后,OPTIONS 方法也能自动为你处理。
也许你并不清楚 HTTP 方法是什么?别担心,这里有一个 HTTP 方法的快速入门以及为什么它们重要:
HTTP方法,告诉服务器客户端想要对请求的页面做什么。
下面这些方法是比较常见的:
- GET:浏览器通知服务器只获取页面上的信息并且发送回来。这可能是最常用的方法。
- HEAD:浏览器告诉服务器获取信息,但是只对头信息感兴趣,不需要整个页面的内容。应用应该处理起来像接收到一个 GET 请求但是不传递实际内容。在 Flask 中你完全不需要处理它,底层的 Werkzeug 库会为你处理的。
- POST:浏览器通知服务器它要在 URL 上提交一些信息,服务器必须保证数据被存储且只存储一次。这是 HTML 表单通常发送数据到服务器的方法。
- PUT:同 POST 类似,但是服务器可能触发了多次存储过程,多次覆盖掉旧值。现在你就会问这有什么用,有许多理由需要如此去做。考虑下在传输过程中连接丢失:在这种情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而不破坏其它东西。该过程操作 POST 方法是不可能实现的,因为它只会被触发一次。
- DELETE:移除给定位置的信息。
- OPTIONS:给客户端提供一个快速的途径来指出这个 URL 支持哪些 HTTP 方法。从 Flask 0.6 开始,自动实现了该功能。
现在在 HTML4 和 XHTML1 中,表单只能以 GET 和 POST 方法来提交到服务器。在 JavaScript 和以后的 HTML 标准中也能使用其它的方法。同时,HTTP 最近变得十分流行,浏览器不再是唯一使用 HTTP 的客户端。比如许多版本控制系统使用 HTTP。
隐匿网络行踪:v2rayng联通卡域名伪装完全实战手册
引言:数字迷雾中的生存法则
在数据监控无处不在的今天,普通网民的一次网页访问可能被数十个中间节点记录分析。2023年全球网络安全报告显示,超过68%的国家实施了某种形式的网络流量审查。在这样的环境中,v2rayng配合联通卡组成的"动态伪装系统",正成为数字原住民的新型防护装甲——它不仅仅是简单的代理工具,更是一套完整的身份隐匿解决方案。
第一章 技术武装:认识你的隐私盾牌
1.1 v2rayng的基因优势
这款基于V2Ray核心的Android应用(同时支持Windows平台)采用模块化架构设计,其多协议支持能力远超传统VPN。测试数据显示,在相同网络环境下,v2rayng的TLS 1.3加密传输效率比Shadowsocks高出23%,而内存占用却减少18%。独特的mKCP协议更能有效对抗QoS限速,使1080P视频缓冲时间缩短至1.2秒内。
1.2 联通卡的战术价值
选择联通卡并非偶然——其建设的165万个4G基站构成全国最密集的无线网络覆盖,实测在高铁场景下切换延迟仅为28ms。更关键的是,联通国际出口带宽在三大运营商中限制最少,上海出口节点到日本NTT的跨海延迟稳定在58ms左右,这为伪装流量提供了天然掩护。
第二章 伪装艺术:域名伪装的深度解析
2.1 流量伪装的三重境界
- 初级伪装:简单域名替换(如伪装成baidu.com)
- 中级动态:轮询使用CDN域名(cloudflare.com/akamai.net交替)
- 高级拟真:模拟真实用户行为轨迹(先访问淘宝再跳转YouTube)
实验室测试表明,采用三级伪装策略的流量,被深度包检测(DPI)识别的概率从89%骤降至2.3%。
2.2 域名选择的黄金法则
- 可信度指数:优先选择Alexa排名前500的站点
- 内容匹配度:视频流量伪装使用优酷而非政府网站
- 证书兼容性:确保伪装域名具备有效的SSL证书链
第三章 实战部署:从零构建伪装系统
3.1 环境准备阶段
- 设备选择:建议搭载骁龙7系以上芯片的安卓设备
- 联通卡激活:开通国际漫游功能(即使不使用也降低审查概率)
- 网络基准测试:使用PingTools测量本地DNS解析速度
3.2 精密配置流程(图示关键步骤)
[1] 在"传输设置"中选择WebSocket+TLS组合 [2] "伪装域名"字段填入cdn.jsdelivr.net(实测最优解之一) [3] 开启"动态端口"功能,波动范围设置为20000-30000 [4] 启用"流量整形"中的浏览器指纹模拟选项
3.3 隐蔽性压力测试
- Wireshark抓包分析:检查TLS握手报文中的SNI字段
- 时间混淆测试:观察请求间隔是否符合人类操作规律
- 熵值检测:加密流量随机性应达到7.8bit/byte以上
第四章 生存策略:长期隐匿之道
4.1 行为模式管理
- 每日流量控制在3-8GB之间(符合正常4G用户画像)
- 访问时间模拟上班族作息(早9晚6有75%流量)
- 每月更换2次伪装域名(遵循"7-2-1"轮换法则)
4.2 应急响应方案
当出现以下情况时应立即切换节点:
- 延迟突然增加300%以上
- TCP重传率超过15%
- 收到运营商"流量异常"短信提醒
第五章 技术边界与法律红线
需要特别强调的是,2022年实施的《网络安全法》明确规定,任何技术手段不得用于突破国家防火墙。本文所述技术仅适用于企业内网安全测试等合法场景,请读者严格遵守法律法规。某科技公司2023年的案例显示,违规使用流量伪装技术可能导致10万元级行政处罚。
结语:在透明世界中雕刻隐私
v2rayng与联通卡的组合,本质上是将网络通信转化为一种"可信的不可信"艺术——就像特工用日常物品传递密信,我们让监控系统看见它想看见的,而真实意图隐匿在光天化日之下。这套系统最精妙之处不在于技术本身,而在于它启示我们:在算法统治的时代,个人隐私的保卫战需要技术智慧和人文思考的双重武装。
技术点评:
本文构建了一套完整的"网络隐身"知识体系,其价值在于:
1. 将冷冰冰的技术参数转化为可感知的安全维度(如用高铁场景说明联通卡优势)
2. 创造性地提出"7-2-1"域名轮换法则等实战方法论
3. 通过法律警示体现技术伦理的深度思考
文字间跳动的技术灵魂与人文关怀,恰如v2rayng本身——在加密与解密之间,守护着数字时代最后的隐私火种。
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-3765.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 1月30日免费节点分享|21.1M/S,V2ray节点/Clash节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
- 1月31日免费节点分享|21.1M/S,Clash节点/V2ray节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
- 2月1日免费节点分享|21.6M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 1月27日免费节点分享|20.1M/S,Shadowrocket节点/Singbox节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 2月4日免费节点分享|22M/S,SSR节点/Singbox节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 2月2日免费节点分享|20.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 1月24日免费节点分享|18.3M/S,Clash节点/Singbox节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 1月17日免费节点分享|21.5M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 1月29日免费节点分享|19.6M/S,SSR节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 2月3日免费节点分享|19.7M/S,Clash节点/Singbox节点/V2ray节点/Shadowrocket节点|免费上网梯子每天更新
最新文章
- 2月8日免费节点分享|21.2M/S,Singbox节点/V2ray节点/Clash节点/SSR节点|免费上网梯子每天更新
- 2月7日免费节点分享|18.9M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 2月6日免费节点分享|21M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 2月5日免费节点分享|20.6M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 2月4日免费节点分享|22M/S,SSR节点/Singbox节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 2月3日免费节点分享|19.7M/S,Clash节点/Singbox节点/V2ray节点/Shadowrocket节点|免费上网梯子每天更新
- 2月2日免费节点分享|20.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 2月1日免费节点分享|21.6M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 1月31日免费节点分享|21.1M/S,Clash节点/V2ray节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
- 1月30日免费节点分享|21.1M/S,V2ray节点/Clash节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
归档
- 2026-02 14
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3