Flask
pip install flask
from flask import Flask, request, jsonify
app = Flask(__name__) # Flask 会依赖于<name>去判断从哪里找模板、静态文件。
@app.route('/index', methods=['GET'])
def index_get():
'''
默认只支持GET
http://127.0.0.1:5000/index?username=admin&password=123456
'''
username = request.args.get('username', 'Guest') # URL参数
password = request.args.get('password', 'Guest')
# post_name = request.form['username'] # 请求体
# post_password = request.form['password']
# post_json = request.json # JSON格式的请求体
print(username, password)
# print(post_name, post_password)
return username, password
@app.route('/hello')
def hello():
return jsonify({'name': 'tyrael',
'email': 'liqianglau@outlook.com'}) # 返回JSON格式的字符串;content-type:application/json
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/user/<username>') # 变量
def show_user_profile(username):
return 'User %s' % username
app.run(host='0.0.0.0', debug=True)
@app.route装饰器用于将URL路由到特定的函数。即访问URL时,会调用相应的函数。
url_for函数用于构建URL。
flask操作Redis
from flask import Flask, request, jsonify
import redis
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
app.config['JSONIFY_MIMETYPE'] = 'application/json;charset=utf-8'
redis_store = redis.Redis(
host="127.0.0.1",
port=6379,
password="123456",
db=1,
decode_responses=True
)
@app.route('/')
def index():
return '''
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redis 控制台</title>
<style>
*{margin:0;padding:0;box-sizing:border-box;font-family: "Microsoft Yahei"}
body{background:#f5f7fa;padding:40px}
.container{max-width:1600px;margin:0 auto}
h2{text-align:center;margin-bottom:30px;color:#333}
.box{display:flex;gap:16px;flex-wrap:wrap;justify-content:center}
.card{background:#fff;padding:20px;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.05);width:340px}
.card h4{margin-bottom:12px;border-left:4px solid #409eff;padding-left:10px;color:#333}
.item{display:flex;gap:6px;align-items:center;margin-bottom:8px;white-space:nowrap}
input{flex:1;padding:6px 10px;border:1px solid #ddd;border-radius:6px;min-width:0}
input:focus{border-color:#409eff;outline:none}
button{padding:6px 12px;background:#409eff;color:#fff;border:none;border-radius:6px;white-space:nowrap}
button:hover{background:#3189df}
</style>
</head>
<body>
<div class="container">
<h2>Redis 可视化操作面板</h2>
<div class="box">
<div class="card">
<h4>字符串</h4>
<div class="item"><input id="sk" placeholder="key"><input id="sv" placeholder="value"><button onclick="set()">设置</button></div>
<div class="item"><input id="gk" placeholder="key"><button onclick="get()">获取</button></div>
<div class="item"><input id="dk" placeholder="key"><button onclick="del()">删除</button></div>
</div>
<div class="card">
<h4>哈希</h4>
<div class="item"><input id="hn" placeholder="哈希名"><input id="hk" placeholder="key"><input id="hv" placeholder="value"><button onclick="hset()">设置</button></div>
<div class="item"><input id="hgn" placeholder="哈希名"><input id="hgk" placeholder="key"><button onclick="hget()">获取</button></div>
</div>
<div class="card">
<h4>集合</h4>
<div class="item"><input id="sk1" placeholder="key"><input id="sm" placeholder="成员"><button onclick="sadd()">添加</button></div>
<div class="item"><input id="sk2" placeholder="key"><input id="sm2" placeholder="成员"><button onclick="srem()">删除</button></div>
<div class="item"><input id="sk3" placeholder="key"><button onclick="smembers()">查看</button></div>
</div>
<div class="card">
<h4>列表</h4>
<div class="item"><input id="lk1" placeholder="key"><input id="lv1" placeholder="值"><button onclick="lpush()">左加</button></div>
<div class="item"><input id="lk2" placeholder="key"><input id="lv2" placeholder="值"><button onclick="rpush()">右加</button></div>
<div class="item"><input id="lk3" placeholder="key"><button onclick="lrange()">查看</button></div>
<div class="item"><input id="lk4" placeholder="key"><input id="lv4" placeholder="值"><button onclick="lrem()">删除</button></div>
<div class="item"><input id="lk5" placeholder="key"><input id="li" placeholder="索引" style="width:60px"><input id="lv5" placeholder="值"><button onclick="lset()">修改</button></div>
</div>
</div>
</div>
<script>
function go(url, data) {
const p = new URLSearchParams(data).toString();
fetch(url+"?"+p).then(r=>r.text()).then(t=>alert("结果:\\n"+t));
}
function set(){go("/set",{key:document.getElementById("sk").value,value:document.getElementById("sv").value})}
function get(){go("/get",{key:document.getElementById("gk").value})}
function del(){go("/del",{key:document.getElementById("dk").value})}
function hset(){go("/hset",{name:document.getElementById("hn").value,key:document.getElementById("hk").value,value:document.getElementById("hv").value})}
function hget(){go("/hget",{name:document.getElementById("hgn").value,key:document.getElementById("hgk").value})}
function sadd(){go("/sadd",{key:document.getElementById("sk1").value,member:document.getElementById("sm").value})}
function srem(){go("/srem",{key:document.getElementById("sk2").value,member:document.getElementById("sm2").value})}
function smembers(){go("/smembers",{key:document.getElementById("sk3").value})}
function lpush(){go("/lpush",{key:document.getElementById("lk1").value,value:document.getElementById("lv1").value})}
function rpush(){go("/rpush",{key:document.getElementById("lk2").value,value:document.getElementById("lv2").value})}
function lrange(){go("/lrange",{key:document.getElementById("lk3").value})}
function lrem(){go("/lrem",{key:document.getElementById("lk4").value,value:document.getElementById("lv4").value})}
function lset(){go("/lset",{key:document.getElementById("lk5").value,index:document.getElementById("li").value,value:document.getElementById("lv5").value})}
</script>
</body>
</html>
'''
# ------------------- 字符串 -------------------
@app.route('/set')
def set_str():
k, v = request.args.get('key'), request.args.get('value')
redis_store.set(k, v)
return f"{k} = {v} 设置成功"
@app.route('/get')
def get_str():
k = request.args.get('key')
return f"{k} = {redis_store.get(k)}"
@app.route('/del')
def del_key():
k = request.args.get('key')
redis_store.delete(k)
return f"{k} 删除成功"
# ------------------- 哈希 -------------------
@app.route('/hset')
def hset():
n, k, v = request.args.get('name'), request.args.get('key'), request.args.get('value')
redis_store.hset(n, k, v)
return f"{n} {k}={v} 保存成功"
@app.route('/hget')
def hget():
n, k = request.args.get('name'), request.args.get('key')
return f"{n} {k} = {redis_store.hget(n, k)}"
# ------------------- 集合 -------------------
@app.route('/sadd')
def sadd():
k, m = request.args.get('key'), request.args.get('member', '').split(',')
for i in m:
if i: redis_store.sadd(k, i)
return "集合添加成功"
@app.route('/srem')
def srem():
k, m = request.args.get('key'), request.args.get('member', '').split(',')
for i in m:
if i: redis_store.srem(k, i)
return "集合删除成功"
@app.route('/smembers')
def smembers():
return jsonify(list(redis_store.smembers(request.args.get('key'))))
# ------------------- 列表 -------------------
@app.route('/lpush')
def lpush():
k, v = request.args.get('key'), request.args.get('value').split(',')
for i in v:
redis_store.lpush(k, i)
return f"左推 {v} 成功"
@app.route('/rpush')
def rpush():
k, v = request.args.get('key'), request.args.get('value').split(',')
for i in v:
redis_store.rpush(k, i)
return f"右推 {v} 成功"
@app.route('/lrange')
def lrange():
return jsonify(redis_store.lrange(request.args.get('key'), 0, -1))
@app.route('/lrem')
def lrem_route():
redis_store.lrem(request.args.get('key'), 0, request.args.get('value'))
return "删除成功"
@app.route('/lset')
def lset():
k, i, v = request.args.get('key'), int(request.args.get('index', 0)), request.args.get('value')
redis_store.lset(k, i, v)
return f"索引 {i} 已改为 {v}"
if __name__ == '__main__':
app.run(debug=True)

浙公网安备 33010602011771号