redis投票功能代码示例前后端
时间: 2023-08-03 15:18:55 浏览: 96
投票实例代码
以下是一个简单的 Redis 投票功能的前后端代码示例,前端使用的是 Vue.js 框架,后端使用的是 Python 的 Flask 框架,Redis 仍然使用的是 Python 客户端 redis-py。
前端代码:
``` html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vote App</title>
</head>
<body>
<div id="app">
<h2>Vote for your favorite item:</h2>
<ul>
<li v-for="(item, count) in items" :key="item">
{{ item }}: {{ count }}
<button @click="vote(item)">Vote</button>
</li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
new Vue({
el: '#app',
data: {
items: {}
},
mounted() {
// 获取投票项目信息
this.fetchItems()
},
methods: {
fetchItems() {
fetch('/items')
.then(response => response.json())
.then(data => {
this.items = data
})
},
vote(item) {
// 发送投票请求
fetch('/vote', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ item })
})
.then(response => response.json())
.then(data => {
alert(data.message)
// 更新投票项目信息
this.fetchItems()
})
}
}
})
</script>
</body>
</html>
```
后端代码:
``` python
import json
from flask import Flask, request
import redis
# 创建 Flask 应用和 Redis 连接
app = Flask(__name__)
redis_conn = redis.Redis(host='localhost', port=6379, db=0)
# 投票项目信息
items = {
'item1': 0,
'item2': 0,
'item3': 0
}
# 将投票项目信息保存到 Redis 的 hash 数据类型中
for item, count in items.items():
redis_conn.hset('vote_items', item, count)
# 获取投票项目信息 API
@app.route('/items', methods=['GET'])
def get_items():
vote_items = redis_conn.hgetall('vote_items')
items_dict = {}
for item, count in vote_items.items():
items_dict[item.decode()] = int(count)
return json.dumps(items_dict)
# 用户投票 API
@app.route('/vote', methods=['POST'])
def vote():
data = request.get_json()
item = data.get('item')
# 检查用户是否已经投过该项目
if redis_conn.sismember('voted_users:{}'.format(item), request.remote_addr):
return json.dumps({'message': 'You have already voted for this item!'})
# 将用户添加到已投票用户集合中
redis_conn.sadd('voted_users:{}'.format(item), request.remote_addr)
# 将该项目的投票数量加1
redis_conn.hincrby('vote_items', item, 1)
return json.dumps({'message': 'You have successfully voted for item {}!'.format(item)})
if __name__ == '__main__':
app.run()
```
以上代码实现了一个简单的 Redis 投票应用,前端页面展示了投票项目列表和投票按钮,用户点击投票按钮后,将投票项目名称作为参数发送到后端 `/vote` API 进行投票。后端检查用户是否已经投过该项目,如果已经投过,则返回错误提示,否则将该用户添加到已投票用户集合中,同时将该项目的投票数量加1,最后返回投票成功的提示。前端在接收到投票成功的提示后,更新投票项目信息,展示最新的投票结果。
阅读全文