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)的更多相关文章

  1. 7-4 python 接口开发(提供mock服务)

    1.登录接口开发(数据存在数据库中)  接口开发做mock(模拟功能) tools.py import pymysql def my_db(sql): conn = pymysql.connect(h ...

  2. Python接口开发小知识

    关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...

  3. Python接口开发

    一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站.web服务. 用flask开发接口的流程为: 1.定义一个server server=flask.Flask(__ ...

  4. python 接口开发(一)

    cmd中,提示pip版本太低,先升级pip   pip install --upgrade pip (pip,安装和管理python扩展包的工具) cmd下,pip,出现详细信息证明装成功了 pip ...

  5. 每天进步一点点——Ganglia的Python扩展模块开发

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Gan ...

  6. python语言(六)mock接口开发、发邮件、写日志、新Excel操作

    一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...

  7. Python(七) —— mock接口开发

    mock接口开发 接口开发有很多框架,诸如 Django,flask,相比较而言,flask 是轻量级web开发框架,用来开发 mock 接口的不二之选.那你可能会问,什么叫 mock 接口呢?moc ...

  8. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  9. python之接口开发基础知识

    一.开发接口的作用 1.mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功.支付失败. 2.了解接口是如何实现的:数据交互.数据返回 ...

随机推荐

  1. pat1020. Tree Traversals (25)

    1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppo ...

  2. Ajax提交表单数据(包含文件)

    1. 表单数据->JSON->后台 2. 表单序列化[方式一] jquery.serializejson.js <script src="/js/jquery.serial ...

  3. 启动和停止GlassFish Server

    您可以使用NetBeans IDE或命令行启动和停止GlassFish Server.   使用NetBeans IDE启动GlassFish Server 单击“服务”选项卡. 展开服务器. 右键单 ...

  4. Hibernate课程 初探一对多映射2-7 测试-修改和删除学生信息

    package com.ddwei.entity; import java.util.Set; import org.hibernate.Session; import org.hibernate.T ...

  5. Redis的原子自增性

    INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那 ...

  6. Refactoring in Coding

    Make changes on existing code for subsequent and constant changes of requirement. Reference:http://w ...

  7. 添加并发请求PDF到工作流附件

    本节实现将并发请求输出PDF文件添加到工作流附件 省去了工作流中其他部分,只对附件部分介绍 1.       建立一个类型为Document的Attribute

  8. Form上传编译

    编译上传的Form,使用命令: 在R12服务器上: cd $AU_TOP/forms/US frmcmp_batch module=$CUX_TOP/forms/ZHS/XXX.fmbuserid=a ...

  9. [c/c++]判断一个字符串是不是UTF-8字符串

    #define CHECK_LENGTH 20       //检查是否为utf8编码时所检查的字符长度  int is_utf8_string(char *utf) { int length = s ...

  10. centreon-engine 性能调优

    http://documentation.centreon.com/docs/centreon-engine/en/latest/user/configuration/best_practice.ht ...