一.flask举例

import flask
server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务
@server.route('/login',methods=['get'])
def hello():
uname = flask.request.values.get('username')
pd = flask.request.values.get('passwd')
sql = 'select * from app_myuser where username="%s"'%uname
res = tools.my_db(sql)
if res:
if tools.my_md5(pd) == res.get('passwd'):
res = {"code":0,"msg":"登录成功!"}
else:
res = {"code":1,"msg":"密码错误!"}
else:
res = {'code':2,"msg":"用户不存在"}
return json.dumps(res,ensure_ascii=False,indent=4)
server.run()
二.按条件查询
@server.route('/api/stu')
def get_stu():
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)
return json.dumps(res,ensure_ascii=False,indent=4)
三.带session的接口
@server.route('/api/login',methods=['get','post'])
def login():
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)
if res:
if tools.my_md5(pd) == res.get('passwd'):
uname_md5 = tools.my_md5(uname+str(time.time()))
# uname_md5 = tools.my_md5(uname)
key='session:%s'%(uname_md5)
user_info = {'user_id':res.get('id'),'user_name':uname}
r = tools.get_redis()
log.debug('连接redis成功')
r.set(key,json.dumps(user_info),setting.SESSION_EXPIRE)
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":"用户不存在"}
return json.dumps(res,ensure_ascii=False)
四.入参是json
@server.route('/api/add_stu',methods=['post'])
def add_stu():
if flask.request.is_json:
session_id = flask.request.json.get('session_id')
name= flask.request.json.get('name')
phone = flask.request.json.get('phone')
grade = flask.request.json.get('grade')
addr = flask.request.json.get('addr','北京')
sex = flask.request.json.get('sex','男')
age = flask.request.json.get('age',18)
gold = flask.request.json.get('gold',1000)
if session_id and name and phone and grade:
login_tag , data = check_session(session_id)
if login_tag:
insert_sql="insert into `jxz`.`app_student` ( `name`, `sex`," \
" `age`, `addr`, `grade`, `phone`, `gold`)" \
" values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s');"%(name,sex,age,addr,grade,phone,gold)
tools.my_db(insert_sql)
res = {'code':0,'msg':'学生信息添加成功'}
else:
res = data else:
res = {'code':3,'msg':'必填参数未填,请查看接口文档!'}
else:
res = {'code':5,'msg':'入参是json类型的!'}
return json.dumps(res, ensure_ascii=False)
五.上传文件
@server.route('/api/upload',methods=['post'])
def upload():
session_id = flask.request.values.get('session_id')
file = flask.request.files.get('file_name')
if session_id and file:
login_tag, data = check_session(session_id)
if login_tag:
new_file_name = '%s_%s'%(int(time.time()),file.filename)
#防止文件名重复,所以把文件名前面加上了时间戳
abs_file_path = os.path.join(setting.UPLOAD_DIR,new_file_name)
#拼文件的绝对路径,这样子就放到了uploads目录下
file.save(abs_file_path)#保存文件
res = {'code':0,'msg':'上传文件成功!'}
else:
res = data
else:
res = {'code':3,'msg':'必填参数未填,请查看接口文档!'}
return json.dumps(res, ensure_ascii=False)
												

python简说(二十一)开发接口的更多相关文章

  1. EasyDSS点播与直播服务器软件-二次开发接口对接说明示列

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本,主要包含:直播.录像, 直播支持RTMP输 ...

  2. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件二次开发接口对接说明示列

    EasyDSS相关功能 EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本主要包含:直播.录像 ...

  3. Python什么是二次开发的意义?python在.net项目采用

    任何人都知道python在.net该项目是做什么的啊? 辅助用途,用作"二次开发"..net站点的话python主要是CGI才用.能够用python编写B/S程序. 解释一下二次开 ...

  4. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

  5. Python学习(二十一) —— 前端之JavaScript

    转载自http://www.cnblogs.com/liwenzhou/p/8004649.html 一.JavaScript概述 1.JavaScript的历史 1992年Nombas开发出C-mi ...

  6. python之saltstack二次开发

    一.salt的概念 salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行).一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选 ...

  7. Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

    一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...

  8. Python学习日记(二十五) 接口类、抽象类、多态

    接口类 继承有两种用途:继承基类的方法,并且做出自己的改变或扩展(代码重用)和声明某个子类兼容于某基类,定义一个接口类interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子 ...

  9. python之路二十一

    URL        - 两个    Views        - 请求的其他信息        from django.core.handlers.wsgi import WSGIRequest   ...

  10. SkylineGlobe 如何使用二次开发接口创建粒子效果

    SkylineGlobe在6.6版本,ICreator66接口新增加了CreateEffect方法,用来创建粒子效果对象: 以及ITerrainEffect66对象接口,可以灵活设置粒子效果对象的相关 ...

随机推荐

  1. selenium处理弹出窗口

    在selenium ui自动化测试过程中,经常会遇到,弹出新窗口,那么会对我们元素定位造成哪些影响呢? 1.元素id或xpath;name都没有问题,就是定位不到. 那如何解决呢?没错webdrive ...

  2. 巧用CurrentThread.Name来统一标识日志记录(java-logback篇)

    ▄︻┻┳═一Agenda: ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录 ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录(续) ▄︻┻┳═一巧用Cur ...

  3. 关于Stuck Archiver的疑问

    客户使用crsctl stat res -t命令去查看RAC集群状态时,发现异常,知晓Stuck Archiver代表归档满,问我们为什么RAC是同一个库,只有实例1显示Stuck Archiver, ...

  4. MyBatis基础入门《八》查询参数传入Map

    MyBatis基础入门<八>查询参数传入Map 描述: 在执行select查询数据的时候,方法传入的参数是java.util.Map类型. 接口方法: xml文件 注意: 书写SQL语句的 ...

  5. [6]传奇3服务器源码分析一GameGate

    1. 2. 留存 服务端下载地址: 点击这里

  6. python ---多进程 Multiprocessing

    和 threading 的比较 多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 ...

  7. Vue系列之 => 自定义键盘修饰符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. css选择问题

    <div class="col-lg-4 col-md-6 mb-4"> <div class="card"> <a href=& ...

  9. nodejs之pm2自动重启服务

    pm2 start xxx #启动服务器 pm2 list #查看运行状态 pm2 logs #查看日志 pm2 restart xxx #重启应用 pm2 stop xxx #停止应用 监听修改,并 ...

  10. Linux基础命令---间歇执行命令watch

    watch watch指令可以间歇性的执行程序,将输出结果以全屏的方式显示,默认是2s执行一次.watch将一直运行,直到被中断. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS ...