python实战: 短链接生成器

python实战: 短链接生成器

项目结构:
error.html用于显示错误
index.html为主页
application.py为服务器
data.json用于保存短链接信息

参考https://blog.csdn.net/qq_36538012/article/details/82884360

error.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>短链接生成器-错误</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <link rel="shortcut icon" href="https://www.easyicon.net/api/resizeApi.php?id=1207033&size=128">
</head>
<body>

<div class="jumbotron text-center">
    <h1>短链接生成器</h1>
    <p>短链接</p>
</div>

<div class="container">
    <h3>{{info}}</h3>
    <br>
    <a href="/index">回到主页</a>
</div>

</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>短链接生成器</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <link rel="shortcut icon" href="https://www.easyicon.net/api/resizeApi.php?id=1207033&size=128">
</head>
<body>

<!-- 右键禁用 -->
<script>
function disableRightClick(e)
	{
        if(!document.rightClickDisabled)	//	initialize
			{
		        if(document.layers)
		        {
				    document.captureEvents(Event.MOUSEDOWN);
				    document.onmousedown = disableRightClick;
		        }
		        else	document.oncontextmenu = disableRightClick;
		return	document.rightClickDisabled	=	true;
			}
			if(document.layers	||	(document.getElementById	&&	!document.all))
			{
		if	(e.which==2||e.which==3)
		{
				return	false;
		}
			}
			else
			{
		return false;
			}
	}
	disableRightClick();
</script>

<div class="jumbotron text-center">
    <h1>短链接生成器</h1>
    <p>短链接</p>
</div>

<!-- 禁用F12 -->
<script>
    /*document.oncontextmenu = function(){return false;}*/
    document.onkeydown=function (e){
        var currKey=0,evt=e||window.event;
        currKey=evt.keyCode||evt.which||evt.charCode;
        if (currKey == 123) {
            window.event.cancelBubble = true;
            window.event.returnValue = false;
        }
    }
</script>
  
<div class="container">
    <form action="/index" method="post">
        <div class="form-group">
            <label>请把你的长链接复制到这里:</label>
            <input type="text" name="long" class="form-control">
        </div>
        <button type="submit" class="btn btn-primary" name="okay">生成</button>
    </form>
    <!-- 显示短链接 -->
    {% if submit %}
    <h5>生成的短链接: </h5>
    <a href="{{result}}" target="_blank">{{result}}</a>
    {% endif %}
</div>

application.py

import json
import flask
import random
import string

app = flask.Flask(__name__)


@app.route('/urls/<code>')
def redirect(code):
    with open('data.json', 'r', encoding='utf-8') as f:
        data = json.loads(f.read())
    url = data.get(code)
    if url:
        return flask.redirect(url)
    return flask.render_template('error.html', info='访问的短链接不存在!')


@app.route('/index', methods=['GET', 'POST'])
def index():
    if flask.request.method == 'GET':
        return flask.render_template('index.html', submit=False, result='')
    else:
        chars = string.ascii_letters + string.digits
        with open('data.json', 'r', encoding='utf-8') as f:
            data = json.loads(f.read())
        code = ''.join(random.sample(chars, 4))
        while code in data:
            code = ''.join(random.sample(chars, 4))
        short = f'localhost:65032/urls/{code}'
        long = flask.request.form.get('long')
        data[code] = long
        with open('data.json', 'w', encoding='utf-8') as f:
            f.write(json.dumps(data))
        return flask.render_template('index.html', submit=True, result=short)
    

app.run(host='localhost', port=65032, debug=True)

data.json

{}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值