使用 Python 开发一个【短链接生成器】 2024-05-10 05:23:37 我们总会遇到类似这样的链接https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589795467819&di=15043ebd2ae7b0a2eac634de991e45af&imgtype=0&src=http%3A%2F%2Fe.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F42a98226cffc1e174eec8bf14190f603728de99b.jpg是不是很长?链接太长分享太烦如何把链接变短?网上有挺多类似的服务的比如新浪的短网址我们将刚刚的长链接压缩一下就变成这样了 通过浏览器访问得到的结果居然是一模一样的http://dwz.date/aEjn怎么突然就变得这么短?我们来抓一下包看看它到底做了些什么访问下这个生成的短链接 可以看到在请求短链接的时候首先是指向 dwz.date 这个服务器的而我们向这个服务器进行 GET 请求的时候它做了 301 重定向 而重定向的地址就是我们压缩前的长链接 可想而知短链接中的 aEjn 和原来的长链接背后应该做着偷鸡摸狗的事情才可以做到这样那么现在思路就有了画个帅b图 帅帅的服务接收一个长链接将长链接 “加密” 生成短字符接着在数据库中插入一条记录这条记录将原本的长链接和压缩后的字符关联起来那么当用户下次访问的时候就是这样 用户拿着短链接去请求服务器服务器根据 “加密” 后的字符去数据库查找找到原始链接后直接帮用户重定向访问原始链接像这种进去的时候是长的出来的时候是短的功能如何用 Python 实现呢接下来就是学习 Python 的正确姿势 首先创建一个 shorturl 文件夹在 shorturl 中创建 templates 来存放 HTML 先来创建下 HTML 吧主要是一个输入框和确认按钮 用了下 bootstrap效果是这样滴 “短就完事了”接着回到 shorturl 中创建 py 先导入 Flask 相关的库然后让它请求根目录的时候返回我们刚刚写的 HTML 运行一波 默认运行在 5000 端口上在浏览器中访问http://127.0.0.1:5000/ 可以运行到说明环境没问题当用户点击生成按钮的时候后端需要把长链接的内容给拿过来那么需要在 HTML 中定义一下form 表单以及 input 中的属性 这里我们定义一个 formPOST 请求指定请求 gen_short_url其中 input 的 name 定义了 long-url这样我们就可以在 Flask 中定义 POST 方法接收长链接的内容了 得到长链接之后就可以压缩长链接然后返回短链接的先假设返回的短链接还是 long-url指定下 short_url 变量在 HTML 中回显一下 回到 HTML 中判断一下 short_url 是否存在存在就显示短链接 运行一波 ok回显成功说明参数之间的对接没有问题那么接下就是用 Python 来写一下把长链接 “缩短” 了怎么缩呢?首先每次点击生成新的长链接的时候我们都需要将它插入到数据库中那么每插一次就会有一个与长链接关联的唯一的 id下次访问的时候通过 id 就可以直接找到原始的链接比如一个长链接"https://www.goooooooooooooooooooooooooooooooooooooooooooooooooooooooooogle.com"插入到数据库中 id longURL 1 https://www.gooo...le.com 那么要生成的短链接地址就是127.0.0.1:5000/1下次通过这个链接访问服务器的时候我们通过 1 就可以找到长链接然后重定向就可以了不过如果插入了上千万甚至上亿条数据呢短链接有可能变成这样127.0.0.1:5000/10000000000000000000000000000000000...那后面生成的岂不是比长链接还长这时候你可能想到了把 id 这整数转化成 16 进制的怎么样不过 16 进制并不能缩短多少要不整下 62 进制试试像这样 可以可以那么我们就在 mysql 中创建一张表就用来放长链接 其中 id 设为自增长url 用来存放长链接接着在 application.py 中连接 mysql 接着我们在用户请求生成短链接的时候也就是在 gen_short_url 中将获取到的长链接塞到刚刚创建的表里面 这样插入之后就可以获取长链接对应的自增 id我们将这个 id 转化为 62 进制缩短之后就可以拼接成短网址了 运行一波 可以看到它缩短了因为 1 的 62 进制还是 1结果看起来不是很明显我们假设插入 100000 条数据试试把数据表的自增 id 改为 100000 开始 再运行一波 ok有内味了接下来要做一个重定向当用户使用短链接向我们服务请求的时候我们获取这个短链接的数据然后去数据库查询后跳转创建一个重定向方法通过 /<encode_url>来接收请求的短链接参数然后把它转化为数据库的 id 拿到了原始 id 之后就可以到数据库查询了获取到长链接然后重定向过去 通过 Flask 的 redirect 方法就可以直接做重定向了当然最好还是加下 try 运行一波 怎么回事?刚闪了一下好像看到了我的身影?ok思路差不多就是这样啦如果你有自己的服务器也可以部署上去玩玩 这样别人通过你的 IP或者你解析的域名就能访问到啦 以上完整代码已上传在公众后后台发送 3 获取我们下回见,peace太爱我的话就加我微信备注 “读者” 即可通过猜你还想看:用 Python 开发一个微信留言小程序用 Python 开发【视频营销号】生成器用 Python 开发一个沙雕 赞 (0) 相关推荐 Python三大主流框架对比!Python学习教程 在Python语言中,有三大主流框架,它们分别为:Flask.Django.Tornado,各具有独特的优势,也是学习Python时必须掌握的框架,那么它们之间有什么区别呢?我们一起来看看详细的介绍. ... 使用 Python 爬取简书网的所有文章 第一时间获取 Python 技术干货! 阅读文本大概需要 6 分钟. 01 抓取目标 我们要爬取的目标是「 简书网 」. 打开简书网的首页,随手点击一篇文章进入到详情页面. 我们要爬取的数据有:作者. ... 如何使用Selenium WebDriver查找错误的链接? 今日互动话题 今年的圣诞节你想怎么过? 当您在网站上遇到404 /页面未找到/无效超链接时,会想到什么想法?啊!当您遇到损坏的超链接时,您会感到烦恼,这是为什么 ... SEO优化,URL突然变成HTTPS,对排名影响大吗? 很多SEO同行和企业主都非常好奇,为什么我可以每天可以长期输出各种不同的SEO问题,并提供相关的解决方案,实际上,这些问题的来源,都是大量从SEO实战中遇到的. 10月初的时候,有个SEO小伙伴上线了 ... 301重定向与302重定向---WordPress重定向插件推荐 许多朋友可能会有这样的疑惑,当你的网站里有一些产品已经下架了,在未来很长一段时间内都不需要这个产品了,有的人可能直接删掉,但是这个页面所有的外链权重就都会消失,在这种情况下我们一般会用重定向来处理. ... 用 Python 开发一个不像 Siri 一样的沙雕 AI ——Niubility 今天我们使用 Python 来玩一下沙雕 AI 像这样的沙雕 说出来你可能不信 几行代码就能实现 不过这样实在过于沙雕了 我们继续改进一下哈哈 让它活生生变成舔狗 首先我们一运行程序的时候 就让它给我 ... 用 Python 开发一个微信留言小程序 在公众号后台,时不时就有朋友吐槽我:"帅b,为什么要关闭公众号的留言功能?" 说出来你可能不信,我是真的没有这个功能,话说在 2018 年 3 月 12 号之后注册的公众号就暂时没 ... 用 Python 开发一个【视频营销号】生成器 之前小帅b在网上看到一个营销号文案生成器,把我给乐的: 其实这个用 Python 实现非常简单,根据用户输入的内容,简单替换一下关键字就可以了,我随手写了一下生成方法: 调用一波: 是不是老小编了?但 ... 用 Python 开发一个 【聊天室】 接下来我们就使用 Python 来操作 socket ,实现一个聊天室的一些主要功能. 首先我们来回想下,一般的聊天室都是怎样的,有多个用户可以同时在线,他们可以实时获取到消息,实时发送消息. 服务端 ... 用 Python 开发一个 【个人计划 todolist】 有一句话是这样说的:"凡事预则立,不预则废",说的是我们在做事之前,最好制定好你的计划,然后有序的去执行,这样不会产生过多的错误和不爽,如果什么都不准备的话,人就容易废掉. 今天, ... 小明用 Python 开发一个 【暴力破解压缩文件 zip 密码】,省了 250 块钱 那天晚上 小明和你一样 在某个小网站上搜寻某些 私密的学习资料 突然看到论坛有人提供了 一个非常牛逼的资源 小明怀着激动的心情 下载了下来 他怀着激动的心情 打开了这个压缩文件 看到就只有这么一个 t ... 用 Python 开发一个【GIF表情包制作神器】 之前小帅b写过这样一篇教程 用python成为了微信斗图届的高手 然后,好多人表示: 虽然存了很多表情包 但似乎还不是很过瘾 因为它不可以自己来定制 我们可不可以根据一些表情素材 然后自己制作专属表情 ... 如何使用 Python 开发一个【抖音视频下载神器】 国外有个在线网站,专门帮别人下载 YouTube 上面的视频,功能很简单直接,就是把你想要的 youtube 视频地址复制进去,然后点击 start 就可以下载视频: 不过,当你点击下载的时候,会跳转 ... 我用Python开发了一个搜题神器 专业搜题,家长好帮手 很早之前曾经做过一个图片识别的项目,当时有一项功能是整题识别,即传入数学题的截图,可通过ocr技术识别出图片内容,但当时只限于识别文字,并未作更深一步的处理,现在想来实用性并不强 ...