为了实现授权,但又不想实现太复杂的情况,可以在页面请求的时候加上一个秘钥,可以通过md5的方式进行认证。

之所以用md5是不想让服务器端存放明文,这种方式的好处就是可以简单存放一个md5的字符串列表。

#! /usr/bin/env python
# -*- coding: utf8 -*-
import os
import sys
import hashlib
import json

top = os.path.dirname(os.path.abspath(__file__))
sys.path.append(top)

json_path = os.path.join(top, 'user.json')
json_source_path = os.path.join(top, 'source.json')


def convert(user_str):
    m2 = hashlib.md5()
    m2.update(user_str)
    return m2.hexdigest()


def append(user):
    new_list = load()
    new_list.append(convert(user_str=user))
    store(new_list)


def store(data):
    with open(json_path, 'w') as json_file:
        json_file.write(json.dumps(list(set(data))))


def load(file_path=json_path):
    with open(file_path) as json_file:
        data = json.load(json_file)
        return data


def get_md5(users):
    return [convert(user) for user in users]


def validate(user):
    return convert(user) in load()


if __name__ == "__main__":
    # 初始化md5列表文件
    store(get_md5(users=list(set(load(file_path=json_source_path)))))
    print validate("tester01")
    print validate("testtestssss")
    # 追加一个新的鉴权信息
    append("tester011")
    print validate("tester011")

执行结果:

True
False
True
# source.json
[
  "tester",
  "tester01",
  "tester02",
  "tester03",
  "tester04"
]

# user.json
[
 "f5d1278e8109edd94e1e4197e04873b9", 
 "fb0e22c79ac75679e9881e6ba183b354", 
 "30dc08cd0ecce4fdc0706053a274b31a", 
 "cb58ef6b2a2dd0269c73301099366f45", 
 "48d85b02cc231688f3142338e4ee4f1c", 
 "c46749e88276768aa072db9d7b720017"
]