(c) 如果用户已经登录, 那么返回他的 seesionid 及登录时间
- import flask,json,time,redis,hashlib
- server = flask.Flask(__name__)# 实例化 server
- def my_redis(k,v = None,time = None):# 操作 redis 的函数
- r = redis.Redis(host = '127.0.0.1',password = '123456',db=1)
- if v:
- r.set(k,v,time)
- res = 'ok'
- else:
- res = r.get(k)
- if r.get(k):
- res = r.get(k).decode()
- return res
- def my_md5(s):#MD5 加密函数
- md = hashlib.md5()
- md.update(s.encode())
- return md.hexdigest()
- @server.route('/reg',methods=['post'])# 注册接口
- def reg():
- username = flask.request.values.get('username')
- pwd = flask.request.values.get('passwd')
- if username and pwd:
- if my_redis('dr_user:%s'%username):
- res = {'msg': '用户已存在', 'msg_code': 2001}
- else:
- my_redis('dr_user:%s'%username,my_md5(pwd))
- res= {'msg': '注册成功!', 'msg_code': 0}
- else:
- res = {'msg':'必填字段未填, 请查看接口文档!','msg_code':1001}
- return json.dumps(res,ensure_ascii=False)
- @server.route('/login',methods=['post'])# 登录接口
- def login():
- username = flask.request.values.get('username')
- pwd = flask.request.values.get('passwd')
- if username and pwd:
- if my_redis('dr_user:%s'%username):
- if my_redis('dr_user:%s'%username)== my_md5(pwd):
- if my_redis('dr_sessionid:%s'%username):# 判断是否已经登录
- res = json.loads(my_redis('dr_sessionid:%s'%username))
- print('已经登录过了走这里')# 服务端打印日志
- else:
- print('第一次登录走这里...')# 服务端打印日志
- sessionid = my_md5('dr_user:%s'%username + str(int(time.time())))# 计算 seesionid
- login_time = time.strftime('%Y%m%d%H%M%S')
- res = {"sessiond": sessionid, "login_time": login_time} #构造好字典
- my_redis('dr_sessionid:%s'%username,json.dumps(res,ensure_ascii=False),3600)#res 转为 json 写入 redis
- else:
- res = {'msg': '密码错误', 'msg_code': 2001}
- else:
- res = {'msg': '用户不存在', 'msg_code': 2001}
- else:
- res = {'msg': '必填字段未填, 请查看接口文档!', 'msg_code': 1001}
- return json.dumps(res,ensure_ascii=False)
- server.run(port=6688,debug=True,host = '0.0.0.0')# 启动服务
2, 创建 api 目录, 及不同作用的子文件夹
(1) 创建 api 目录, 目录如下
根据 linux 下文件夹的分类来划分:
bin 目录存放启动服务的可执行脚本
config 或 etc 存放配置文件, 如 mysql, redis
data 存放 sql 语句, 创建表格或者类似的东西
lib 目录存放开发使用到的函数, 即工具, 还有开发好的接口也放在这里
logs 目录存放日志文件
readme 简要介绍程序运行及参数修改的说明文档
(2) 将 api 目录标记为 Sources Root
因为后面将各个模块放在不同的文件夹中相互引用, 引用自己的 python 文件做为模块时需要将路径加入环境变量, 否则会报错. 右键文件夹, Mark Directory as Sources Root 后, pycharm 将整个 api 文件夹统一加入环境变量.
3, 将不同功能的代码放入固定目录
(1) 在 config 下创建一个 setting.py 文件, 存入要用到的配置参数, 都是常量
- REDIS_INFO={
- 'host':'127.0.01',
- 'password' : '123456',
- 'db':1,
- 'port': 6379
- }#redis 的配置信息
- SERVER_PORT = 6688 #服务的端口号
(2) 在 lib 下创建一个 tools.py 文件, 存入操作 redis,MD5 加密函数
- import redis,hashlib,time
- from etc.setting import REDIS_INFO
- #from config import setting# 变量很多时导入文件夹一级
- #setting.REDIS_INFO
- def my_redis(k,v = None,time = None):# 操作 redis 的函数
- r = redis.Redis(**REDIS_INFO)
- # **REDIS_INFO 将字典转为: host = '127.0.0.1',passwd=123456,port = 6379,db =1
- if v:
- r.set(k,v,time)
- res = 'ok'
- else:
- res = r.get(k)
- if r.get(k):# 防止 None decode 报错
- res = r.get(k).decode()
- return res
- def my_md5(s):#MD5 加密函数
- md = hashlib.md5()
- md.update(s.encode())
- return md.hexdigest()
(3) 在 lib 下创建一个 interface.py 文件, 存入注册及登录接口
- import flask,json,time,datetime
- # 写的接口逻辑
- server = flask.Flask(__name__)
- from lib.tools import my_redis,my_md5
- @server.route('/reg',methods=['post'])# 注册接口
- def reg():
- username = flask.request.values.get('username')#username 是接口调用的 key, 即入参
- pwd = flask.request.values.get('passwd')#passwd 是接口调用的 key, 即入参
- if username and pwd:
- if my_redis('dr_user:%s'%username):
- res = {'msg': '用户已存在', 'msg_code': 2001}
- else:
- my_redis('dr_user:%s'%username,my_md5(pwd))
- res= {'msg': '注册成功!', 'msg_code': 0}
- else:
- res = {'msg':'必填字段未填, 请查看接口文档!','msg_code':1001}
- return json.dumps(res,ensure_ascii=False)
- @server.route('/login',methods=['post'])# 登录接口
- def login():
- username = flask.request.values.get('username')
- pwd = flask.request.values.get('passwd')
- if username and pwd:
- if my_redis('dr_user:%s'%username):
- if my_redis('dr_user:%s'%username)== my_md5(pwd):
- if my_redis('dr_sessionid:%s'%username):# 判断是否已经登录
- res = json.loads(my_redis('dr_sessionid:%s'%username))
- print('已经登录过了走这里')
- else:
- print('第一次登录走这里...')
- sessionid = my_md5('dr_user:%s'%username + str(int(time.time())))# 计算 seesionid
- login_time = time.strftime('%Y%m%d%H%M%S')
- res = {"sessiond": sessionid, "login_time": login_time} #构造好字典
- my_redis('dr_sessionid:%s'%username,json.dumps(res,ensure_ascii=False),3600)#res 转为 json 写入 redis
- else:
- res = {'msg': '密码错误', 'msg_code': 2001}
- else:
- res = {'msg': '用户不存在', 'msg_code': 2001}
- else:
- res = {'msg': '必填字段未填, 请查看接口文档!', 'msg_code': 1001}
- return json.dumps(res,ensure_ascii=False)
(4) 在 bin 下创建一个 start.py 文件, 用来启动服务
- from lib.interface import server
- from etc.setting import SERVER_PORT
- server.run(host = '0.0.0.0',port=SERVER_PORT,debug=True)
至此, 模块结构调整完成, 运行 start.py 即可启动程序.
来源: http://www.bubuko.com/infodetail-2605916.html