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

使用 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




是不是很长?



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



链接太长
分享太烦

如何把链接变短?
网上有挺多类似的服务的

比如新浪的短网址
我们将刚刚的长链接压缩一下
就变成这样了



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




通过浏览器访问得到的结果
居然是一模一样的

http://dwz.date/aEjn
怎么突然就变得这么短?



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



我们来抓一下包
看看它到底做了些什么


访问下这个生成的短链接



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




可以看到
在请求短链接的时候

首先是指向 dwz.date 这个服务器的


而我们向这个服务器进行 GET 请求的时候
它做了 301 重定向




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




而重定向的地址
就是我们压缩前的长链接



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




可想而知
短链接中的 aEjn 和原来的长链接
背后应该做着偷鸡摸狗的事情
才可以做到这样



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



那么现在
思路就有了
画个帅b图



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




帅帅的服务接收一个长链接
将长链接 “加密” 生成短字符

接着在数据库中
插入一条记录

这条记录将原本的
长链接和压缩后的字符关联起来

那么当用户下次访问的时候
就是这样



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




用户拿着短链接去请求服务器
服务器根据 “加密” 后的字符去数据库查找

找到原始链接后
直接帮用户重定向访问原始链接



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




像这种进去的时候是长的
出来的时候是短的功能

如何用 Python 实现呢

接下来就是
学习 Python 的正确姿势

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





首先创建一个 shorturl 文件夹
在 shorturl 中创建 templates 来存放 HTML



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




先来创建下 HTML 吧
主要是一个输入框和确认按钮



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




用了下 bootstrap
效果是这样滴



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




“短就完事了”



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



接着回到 shorturl 中创建 py



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




先导入 Flask 相关的库
然后让它请求根目录的时候
返回我们刚刚写的 HTML



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




运行一波



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




默认运行在 5000 端口上
在浏览器中访问
http://127.0.0.1:5000/



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




可以运行到
说明环境没问题



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



当用户点击生成按钮的时候
后端需要把长链接的内容给拿过来

那么需要在 HTML 中定义一下
 form 表单以及 input 中的属性



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




这里我们定义一个 form
POST 请求指定请求 gen_short_url
其中 input 的 name 定义了 long-url


这样我们就可以
在 Flask 中定义 POST 方法
接收长链接的内容了



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



得到长链接之后
就可以压缩长链接
然后返回短链接的

先假设返回的短链接还是 long-url
指定下 short_url 变量
在 HTML 中回显一下



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




回到 HTML 中
判断一下 short_url 是否存在
存在就显示短链接



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




运行一波



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




ok
回显成功
说明参数之间的对接没有问题

那么接下就是用 Python 来写一下
把长链接 “缩短” 了


怎么缩呢?


首先
每次点击生成新的长链接的时候
我们都需要将它插入到数据库中

那么
每插一次就会有一个与
长链接关联的唯一的 id

下次访问的时候
通过 id 就可以直接找到原始的链接


比如


一个长链接
“https://www.goooooooooooooooooooooooooooooooooooooooooooooooooooooooooogle.com”


插入到数据库中


id
longURL
1
https://www.gooo…le.com


那么要生成的短链接地址就是
127.0.0.1:5000/1

下次通过这个链接访问服务器的时候
我们通过 1 就可以找到长链接
然后重定向就可以了



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



不过
如果插入了上千万甚至上亿条数据呢
短链接有可能变成这样

127.0.0.1:5000/10000000000000000000000000000000000…

那后面生成的岂不是比长链接还长



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



这时候你可能想到了
把 id 这整数转化成 16 进制的怎么样

不过 16 进制并不能缩短多少
要不整下 62 进制试试



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




像这样




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



可以可以


那么我们就在 mysql 中创建一张表
就用来放长链接



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



其中 id 设为自增长
url 用来存放长链接

接着在 application.py 中连接 mysql



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




接着我们在用户请求生成短链接的时候
 也就是在 gen_short_url 中
将获取到的长链接塞到刚刚创建的表里面



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




这样插入之后就可以获取长链接对应的自增 id

我们将这个 id 转化为 62 进制
缩短之后就可以拼接成短网址了



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



运行一波



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




可以看到
它缩短了

因为 1 的 62 进制还是 1
结果看起来不是很明显

我们假设插入 100000 条数据试试
把数据表的自增 id 改为 100000 开始



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




再运行一波


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




ok
有内味了

接下来要做一个重定向
当用户使用短链接向我们服务请求的时候
我们获取这个短链接的数据
然后去数据库查询后跳转


创建一个重定向方法
通过 /<encode_url>
来接收请求的短链接参数
然后把它转化为数据库的 id



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




拿到了原始 id 之后
就可以到数据库查询了

获取到长链接
然后重定向过去



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



通过 Flask 的 redirect 方法
就可以直接做重定向了


当然
最好还是加下 try



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




运行一波



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






怎么回事?
刚闪了一下
好像看到了我的身影?



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



ok
思路差不多就是这样啦
如果你有自己的服务器
也可以部署上去玩玩



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



这样别人通过你的 IP
或者你解析的域名
就能访问到啦



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




以上完整代码已上传
在公众后后台发送 3 获取
我们下回见,peace


太爱我的话就加我微信
备注 “读者” 即可通过

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




猜你还想看:
用 Python 开发一个微信留言小程序
用 Python 开发【视频营销号】生成器
用 Python 开发一个沙雕


Visits: 10

发表回复