實在是思惟江化啊,沒有想到能夠給redis設置不一樣的key值來實現不一樣key值存儲不一樣的value值,而一直想着給一個名爲token的key值新增不一樣的數據,並設置過時時間,然而這樣卻不能新增只能作到覆蓋,所以糾結了好一會。狠狠抽本身一巴掌Ծ‸Ծ。python
client端redis
import requests token = "dnsjabdjsabdnjsabdnjsabjdsbajhdbsa" ###### 1.第一種,對稱加密 # res = requests.get('http://127.0.0.1:8000/asset/', headers={'token':token}) # print(res.text) ###### 2.第二種,不對稱加密 import time ctime = time.time() tmp = "%s|%s" % (token, ctime) import hashlib m = hashlib.md5() m.update(bytes(tmp, encoding='utf8')) res = m.hexdigest() client_token = "%s|%s" % (res, ctime) print(client_token) res = requests.get('http://127.0.0.1:8000/asset/', headers={'token':client_token}) print(res.text)
server端數據庫
#三層驗證,保證安全性 def asset(request): if request.method == 'POST': print(request.body) return HttpResponse('ok') else: #### 鏈接數據庫, 獲取存儲的主機名 token = 'dnsjabdjsabdnjsabdnjsabjdsbajhdbsa' #META裏面是http的一些請求頭信息 res = request.META.get('HTTP_TOKEN') client_token, ctime = res.split('|') # if token != client_token: # return HttpResponse('非法的請求!') #第一關,設置有效時間 server_time = time.time() if float(server_time) - float(ctime) > 20: return HttpResponse('第一關:key過時') #第二關,校驗token值 tmp = "%s|%s" % (token, ctime) import hashlib m = hashlib.md5() m.update(bytes(tmp, encoding='utf8')) server_token = m.hexdigest() if server_token != client_token: return HttpResponse('第二關:非法的請求!') ### 第三關,token只能使用一次,並設置過時時間,防止數據堆積 ### decode_responses=True能夠使從redis獲得的數據不是bytes類型 ### django鏈接redis, 將key發到redis中, 並設置過時時間 r = redis.Redis(host='127.0.0.1', port=6379, db=1,decode_responses=True) #實現方法,就是這麼簡單 if ctime==r.get(client_token): return HttpResponse('第三關 已經訪問過了') r.setex(client_token,20,ctime) return HttpResponse('重要的數據')