我们总是见面。
像这样的链接
https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1589795467819&di=15043ebd2ae7b0a2eac634de991e45af&imgtype=0&src=http://e.hiphotos.baidu.com/zhidao/pic/item/42a98226cffc1e174eec8bf14190f603728de99b.jpghttps://timgsa.baidu.com/timg? image & quality = 80 & size = b 9999 _ 10000 & sec = 1589795467819 & di = 15043 EBD 2 AE 7 b 0a 2 EAC 634 de 991 e 45 af & imgtype = 0 & src = http://e . hiphotos . Baidu . com/zhidao/pic/item/42a 98226 cffc 1 e 174 EEC 8 BF 14190 f 603728 de 99 b
很长吗?
链接太长
分享太讨厌了。
如何缩短链接?
网上类似的服务也不少。
比如新浪的短网站
先把刚才的长链接压缩一下。
事情就是这样。
通过浏览器访问获得的结果
其实完全一样
http://dwz.date/aEjn
怎么突然变得这么短了?
我们去拿包。
看看它做了什么。
访问这个生成的短链接。
能看见
当请求短链接时
首先,它指向服务器dwz.date。
当我们向这个服务器发出GET请求时
它做了301重定向。
和重定向地址
是我们压缩之前的长链接。
人们可以想象
短链接和原始长链接中的AEjn
你应该在幕后做点什么。
来做这个。
所以现在
有一个想法。
画一张帅B图
帅帅的发球接长球。
加密长链接以生成短字符
然后在数据库中
插入记录
这张唱片将是原版的
长链接与压缩字符相关联。
那么当用户下次访问时
就是这样。
用户用一个短链接请求服务器。
服务器根据加密字符搜索数据库。
找到原始链接后
帮助用户直接重定向到原始链接。
像这样,进去就长出来了。
出来就是一个短函数。
如何用Python实现
下一步是
学习Python的正确姿势
首先创建一个shorturl文件夹。
在shorturl中创建模板来存储HTML
让我们先创建HTML。
主要是一个输入框和一个确认按钮。
我用了自举。
效果是这样的。
“这只是时间问题”
然后返回到shorturl来创建py。
首先导入与Flask相关的库。
然后让它请求根目录。
回到我们刚刚写的HTML。
运行一波
默认情况下,它运行在端口5000上。
在浏览器中访问
http://127.0.0.1:5000/
可以跑到
说明环境没问题。
当用户点击生成按钮时
后端需要把长链接的内容带过来。
那么就需要用HTML来定义。
表单和输入中的属性
我们在这里定义一个表单。
POST请求指定请求gen_short_url
输入的名称定义了一个长url。
这样我们就可以
在Flask中定义POST方法
收到了长链接的内容
得到长链接后
长链接可以压缩。
然后返回短链接的。
假设首先返回的短链接是long-url。
指定较低的short_url变量
用HTML回显它
返回HTML
检查short_url是否存在。
如果有一个短链接,它将被显示
运行一波
好的
回声成功
说明参数之间的对接没有问题。
然后下一步就是用Python写了
缩短了长链接。
怎么缩小?
第一
每次点击都会生成一个新的长链接
我们都需要把它插入数据库。
因此
每次插入都会有一个带
长链接关联的唯一id
在下一次访问时
可以直接通过id找到原文链接。
例如
一个长链接
"https://www . gooooooooooooooooooooooooooooooooooooooooooooooooooooo . com & # 34;
插入数据库
id
longURL
1
https://www . gooo...le.com
那么要生成的短链接地址是
127.0.0.1:5000/1
下次您通过此链接访问服务器时。
我们可以通过1找到长链接。
然后重定向它。
但是
如果插入几千万甚至上亿条数据会怎样?
短链接可能会变成这样。
127.0.0.1:5000/10000000000000000000000000000000000. .。
生成的后期不是比长链接更长吗?
这个时候,你可能已经想到了。
把整数id转换成十六进制怎么样?
但是,十六进制不能缩短太多。
尽量不要调整十六进制数。
像这样
当然
然后我们将在mysql中创建一个表。
它是用来放长链接的。
其中id被设置为自生长
Url用于存储长链接。
然后在application.py中连接mysql
然后,当用户请求生成短链接时
即在gen_short_url中
将获得的长链接插入刚刚创建的表中。
这样,插入后就可以得到长链接对应的自增id。
让我们把这个id转换成62。
缩短后可以拼接成一个短URL。
运行一波
能看见
它缩短了
因为1的十六进制数还是1。
结果看起来并不明显。
让我们尝试插入10万条数据。
首先将数据表的自增量id更改为100000。
运行另一波
好的
终于做对了
接下来,我们将进行重定向。
当用户使用短链接请求我们的服务时
我们得到这个短链接的数据。
然后去数据库查询跳转。
创建重定向方法。
通过/
以接收所请求的短链接参数。
然后将其转换为数据库的id。
拿到身份证原件后
你可以在数据库里查询。
转到长链接
然后重定向过去。
通过烧瓶的重定向方法
可以直接重定向。
当然可以
最好加上试试
运行一波
这是怎么回事?
刚刚闪过。
你看到我的身材了吗?
好的
差不多就是这个想法。
如果你有自己的服务器
也可以为了好玩而部署。
这样别人就可以使用你的IP
或者您解析的域名。
你可以访问它。
以上完整代码已上传。