8-1 python 接口开发(提供数据、返回session_id)
1、接口开发,根据不同查询条件返回数据库查询结果
import flask
import tools
import json server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务 @server.route('/api/stu')
def get_stu():
"""
获取学生信息接口
:return: 返回从数据库中查询到符合查询条件的信息
"""
username = flask.request.values.get('name') # 默认get不到的话,返回的值就是None
age = flask.request.values.get('age')
if username and age: # 判断用户名和密码都存在
# 用户名和密码符合条件的
sql = "select * from app_student where name='%s' and age='%s'" % (username, age)
elif not username and age: # 用户名为空,查询符合年龄条件的数据
sql = "select * from app_student where age='%s'" % age
elif username and not age: # 年龄为空,查询符合用户名条件的数据
sql = "select * from app_student where name='%s'" % username
else: # 没有搜索条件,默认返回所有数据
sql = "select * from app_student"
res = tools.my_db2(sql) # 调用tools中的my_db2函数,执行sql语句,返回查询结果
# 返回执行结果,将结果转成json格式
return json.dumps(res,ensure_ascii=False,indent=4) server.run(host='0.0.0.0', port=8999, debug=True)
2、接口开发 返回session_id
import json
import time
import tools
import flask
server = flask.Flask(__name__) import nnlog # 1、导入第三方模块nnlog
log = nnlog.Logger('book_server.log') # 添加一个日志文件 @server.route('/api/login',methods=['get','post']) # 接口访问既可以用get方法也可以用post方法
def login():
"""
登录接口,返回session_id 日志打印
:return:
"""
uname = flask.request.values.get('username')
pd = flask.request.values.get('passwd')
sql = 'select * from app_myuser where username="%s"'%uname
log.debug('登录执行的sql是:%s'%sql)
res = tools.my_db(sql) # 调用tools下的my_db函数,返回符合查询条件的一条结果
if res: # 查询结果存在
if tools.my_md5(pd) == res.get('passwd'): # 判断密码是否正确
# 调用tools下的my_md5函数对用户名进行加密
# 因为使用用户名MD5加密后,每一次失效后加密的结果还是一样的,
# 所以在用户名后面 拼了一个当前时间戳str(time.time()
uname_md5 = tools.my_md5(uname+str(time.time()))
# uname_md5 = tools.my_md5(uname)
key='session:%s'%(uname_md5) # redis中的key值就是加密后的用户名
# redis中的value值 字典格式
user_info = {'user_id':res.get('id'),'user_name':uname}
r = tools.get_redis() # 调用tools下的连接redis函数 连接redis
log.debug('连接redis成功')
# 将 key值 value值,过期时间写入redis
# 因为user_info是字典格式,需要转换成json串格式才能存入redis
r.set(key,json.dumps(user_info),SESSION_EXPIRE = 60*60*1) #SESSION_EXPIRE 设置过期时间
# 接口返回的结果都是json的格式
# 在结果中返回相应的数据,返回
# 'login_time':time.strftime('%Y-%m-%d %H:%M:%S') 以格式化好的时间打印当前时间
res = {"code":0,"msg":"登录成功!",'session_id':uname_md5,
'login_time':time.strftime('%Y-%m-%d %H:%M:%S')}
log.warning('%s 用户登陆成功'%uname)
else: # 密码不正确时返回的结果
res = {"code":1,"msg":"密码错误!"}
else: # 查询结果不存在
log.warning('%s用户不存在'%uname)
res = {'code':2,"msg":"用户不存在"} # 返回的结果res是字典格式,需要转化成json格式
return json.dumps(res,ensure_ascii=False)
3、写一个校验session_id的函数,供后面的每个接口校验session_id使用
from . import tools
import json
def check_session(session_id):
"""
校验session是否过期
:param session_id: 传入的session
:return: session是否过期,返回session_id
"""
session_tag = False # SESSION是否失效的标识
r = tools.get_redis() # 连接redis
# 从redis中获取session_id,因为存的时候前面加了 session: ,所以获取的时候也得在前面加上
res = r.get('session:'+session_id)
if res: # 判断是否存在session_id
session_tag = True # 将session_tag 置为True,表示session还没有失效
data = json.loads(res) # 把json转成字典
else: # 不存在session_id 让用户重新登录
data = {'code':4,'msg':'请登录!'}
return session_tag,data # 返回两个参数,一个session_id是否过期,一个返回
8-1 python 接口开发(提供数据、返回session_id)的更多相关文章
- 7-4 python 接口开发(提供mock服务)
1.登录接口开发(数据存在数据库中) 接口开发做mock(模拟功能) tools.py import pymysql def my_db(sql): conn = pymysql.connect(h ...
- Python接口开发小知识
关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...
- Python接口开发
一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站.web服务. 用flask开发接口的流程为: 1.定义一个server server=flask.Flask(__ ...
- python 接口开发(一)
cmd中,提示pip版本太低,先升级pip pip install --upgrade pip (pip,安装和管理python扩展包的工具) cmd下,pip,出现详细信息证明装成功了 pip ...
- 每天进步一点点——Ganglia的Python扩展模块开发
转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Gan ...
- python语言(六)mock接口开发、发邮件、写日志、新Excel操作
一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...
- Python(七) —— mock接口开发
mock接口开发 接口开发有很多框架,诸如 Django,flask,相比较而言,flask 是轻量级web开发框架,用来开发 mock 接口的不二之选.那你可能会问,什么叫 mock 接口呢?moc ...
- 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言
前 言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...
- python之接口开发基础知识
一.开发接口的作用 1.mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功.支付失败. 2.了解接口是如何实现的:数据交互.数据返回 ...
随机推荐
- DEDECMS v5.7 完美实现导航条下拉二级菜单
一.引言 好多人都问,织梦的下拉导航怎么做呢?其实很简单!即使你对代码一点也不熟悉,没关系! 按照我的步骤走!记住一步也不能错哦! 二.实现过程 1.首先: 将下面这段代码贴到templets\def ...
- Mac 安装YCM
① 安装Xcode的同时, 安装配套的命令行工具, 包括git, cmake, clang ② 安装Macvim, 并在~/.bashrc文件中设定别名, alias vim="/path/ ...
- 使用dtd--属性声明
<!ATTLIST 元素名 属性名称 属性类型 属性特点> 1.属性类型 类型 含义 CDATA 纯文本 enumerated 枚举类型 ID 以属性的方式唯一标识改元素,必须以字母开头 ...
- SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
[OLE DB 源 [2]] 错误: SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.对连接管理器“test.trade_sh ...
- js去除重复项
window.onload = function(){ var array = [12, 14,15,17,12,11,12,14,16] alert(del(array)); } function ...
- mysql-查询(DQL)
+ 注释:mysql中的+号只有一个作用,就是运算符,没有连接字符串的作用,连接字符串用concat. ;两个操作数都是数值型,则做加法运算. ; :只要其中有一个时字符型,则会试图将字符转换为数值型 ...
- 工作流常使用API
记录实际开发中常使用到的API CreateProcess 在工作流开始之前,创建一个新的工作流 Wf_engine.CreateProcess (itemtype in varchar2, - ...
- EF--DB First
DB First先有数据库,根据数据库生成Model实体对象. 1.新建数据库表,Poet,Poem,Meter.关系如下: 建表语句 create table Poet ( PoetId ,) pr ...
- jupyter notebook 报错 ImportError: No module named matplotlib
解决办法: 打开Anaconda Prompt 列出conda环境: conda info --envs 结果显示: # conda environments: # tensorflow * D:\ ...
- Properties的使用以及配置文件值的获取
一.项目的部署如下,现在要获取SystemGlobals.properties中的值 二.代码如下: package com.util; import java.io.IOException; imp ...