flask制作一个粗糙简单的短网址功能
来源:互联网 发布:linux apache配置 编辑:程序博客网 时间:2024/04/25 07:46
for example : dwz.cn 所需后台知识
1.了解页面的元素,即所需要的一些具体的功能,做出前端的页面 框架,如index.html:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <form action="get_short_url" method="post"> Short URL:<input type="text" name="real_url"><input type="submit"></form></body></html>
2.了解数据库的机制,如一些简单的常规 功能,创建表单,添加一些元素内容,查找数据库的内容:
import sqlite3def init_data(): conn = sqlite3.connect('test.db') c = conn.cursor() c.execute(''' CREATE TABLE IF NOT EXISTS url_data (real_url TEXT,short_id TEXT) ''' ) conn.commit() conn.close()def insert_data(real_url, short_id): conn = sqlite3.connect('test.db') c = conn.cursor() t = (real_url, short_id) c.execute('INSERT INTO url_data VALUES (?,?)', t) conn.commit() conn.close()def select_short_data(short_id): conn = sqlite3.connect('test.db') c = conn.cursor() result = None t = (short_id,) c.execute('SELECT * FROM url_data WHERE short_id=?', t) for row in c.fetchall(): result = row conn.commit() conn.close() return resultdef select_real_data(real_url): conn = sqlite3.connect('test.db') c = conn.cursor() result = None t = (real_url,) c.execute('SELECT * FROM url_data WHERE real_url=?', t) for row in c.fetchall(): result = row conn.commit() conn.close() return result
一个短网址的主要功能是生成一个短网址与原网址相对应,生成一个数组,当传入原网址时生成或者差找到对应的短网址,
了解转换的机制,如随机数的生成,需要注意的地方有,随机数生成的空间和随机数的重复性查重。
先生成一个简单的随机数如:
short_url = str(random.randint(0, 200000))
接下来考虑将原网址与短网址想对应传入数据库中:
首先需要get源网址:long_url = request.form[‘url’]
然后找到上传的服务域名:host = request.headers[‘HOST’],,避免域名改动的时候,发生请求错误。
接着生成随机数,将随机数与原网址对应传入相应的数据库。最后返回生成的短网址
@app.route('/get_short_url', methods=['POST'])def get_short_url(): host = request.headers['HOST'] short_id = str(random.randint(0, 200000)) insert_db(long_long_url = request.form['url']url, short_id) return 'http://'+host + '/' + short_id
最后输入短网址的时候需要将短网址重定位,203请求跳转回原网址。需要先回数据库查找到短网址对应的原网址,后将原网址重定位:
@app.route('/<short_id>')def redirect_to_long_url(short_id): short_url = select_db(short_id) if short_url is None: return 'Not Found' return redirect(short_url[0])
如果需要查找大量的网址,难免有冲突,或者前面有人储存过,所以为了防止冲突和重复,我们需要做的是,先查询是否生成过短网址,然后如果没生成,将随机数生成优化,返回数据库查找是否重复冲突,冲突则再次重新生成一个
def random_url(): short_id = random.randint(0, 2000000) result = select_short_data(short_id) while result is not None: short_id = random.randint(0, 2000000) result = select_short_data(short_id) return short_iddef exist_url(long_url): result = select_real_data(long_url) if result is not None: return True
将功能优化后再插入原先的代码中:
@app.route('/get_short_url', methods=['POST'])def get_short_url(): host = request.headers['HOST'] long_url = request.form['real_url'] if exist_url(long_url): short_id = select_real_data(long_url)[1] return 'http://' + host + '/' + str(short_id) short_id = random_url() insert_data(long_url, short_id) return 'http://' + host + '/' + str(short_id)@app.route('/<int:short_id>')def redirect_to_long_url(short_id): url = select_short_data(short_id) if short_id is None: print('Not found') return redirect(url[0])
完成一个短网址的功能制作,忽略页面设置。
0 0
- flask制作一个粗糙简单的短网址功能
- 短网址的简单实现
- 简单的生成短网址
- 短网址功能实现
- 一个简单的flask程序
- 超简单的短网址php实现
- 超简单的短网址php实现
- 利用126短网址API写的一个函数
- 一个粗糙的首页……
- 一个粗糙的oppo缓动效果
- 制作一个简单的setup
- 制作一个简单的计算器
- 一个简单的外挂制作
- 制作一个简单的文件系统
- 制作一个简单的动画
- 一个简单的表格制作
- 制作一个简单的画板
- 如何制作一个简单的仿百度搜索功能的网页
- Linux目录结构、Linux分区大小、挂载点和如何分区
- 控制流程语言
- 二维码扫描实现
- 二叉树系列1: 层次遍历二叉树
- Visio Premium 2010密钥+破解激活方法 【转】
- flask制作一个粗糙简单的短网址功能
- java String类总结
- 不同作用域(scope)的Spring Bean之间的依赖关系的动态代理注入
- tcpdump 抓包命令 参数用法详解
- 按钮式链接
- android中touch事件分发机制
- Android快速开发系列 10个常用工具类
- Leaflet.js+d3
- HDU 2016数据的交换输出