使用 Python 开发一个【短链接生成器】

我们总会遇到
类似这样的链接
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 中的属性
这里我们定义一个 form
POST 请求指定请求 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)

相关推荐

  • 301重定向与302重定向---WordPress重定向插件推荐

    许多朋友可能会有这样的疑惑,当你的网站里有一些产品已经下架了,在未来很长一段时间内都不需要这个产品了,有的人可能直接删掉,但是这个页面所有的外链权重就都会消失,在这种情况下我们一般会用重定向来处理. ...

  • 如何使用Selenium WebDriver查找错误的链接?

    今日互动话题 今年的圣诞节你想怎么过?                     当您在网站上遇到404 /页面未找到/无效超链接时,会想到什么想法?啊!当您遇到损坏的超链接时,您会感到烦恼,这是为什么 ...

  • 使用 Python 爬取简书网的所有文章

    第一时间获取 Python 技术干货! 阅读文本大概需要 6 分钟. 01 抓取目标 我们要爬取的目标是「 简书网 」. 打开简书网的首页,随手点击一篇文章进入到详情页面. 我们要爬取的数据有:作者. ...

  • Python三大主流框架对比!Python学习教程

    在Python语言中,有三大主流框架,它们分别为:Flask.Django.Tornado,各具有独特的优势,也是学习Python时必须掌握的框架,那么它们之间有什么区别呢?我们一起来看看详细的介绍. ...

  • SEO优化,URL突然变成HTTPS,对排名影响大吗?

    很多SEO同行和企业主都非常好奇,为什么我可以每天可以长期输出各种不同的SEO问题,并提供相关的解决方案,实际上,这些问题的来源,都是大量从SEO实战中遇到的. 10月初的时候,有个SEO小伙伴上线了 ...

  • 用 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技术识别出图片内容,但当时只限于识别文字,并未作更深一步的处理,现在想来实用性并不强 ...