当前位置:   article > 正文

python网站开发实例-【9】Python接口开发:flask Demo实例

flask实例

举例1,返回当前时间接口

'''初始化:所有的Flask都必须创建程序实例,

web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例

程序实例是Flask的对象,一般情况下用如下方法实例化

Flask类只有一个必须指定的参数,即程序主模块或者包的名字,__name__是系统变量,该变量指的是本py文件的文件名'''

from flask importFlaskimportdatetime

server=Flask(__name__)

@server.route('/time',methods=['post','get'])defget_time():

now=str(datetime.datetime.now())#把当前时间转换成字符串

return "当前的时间是:%s"%now

server.run(port=8888)

执行后网页显示如下:

1352084-20181106153527609-2132902414.png

举例2:怎样跳转到你的网站

1、先写好一个HTML前端页面(例如我随便写了一个index.html放在了当前路径下)

1352084-20181106153735139-1791206824.png

2、写接口,返回html前端页面。

importflask

server=flask.Flask(__name__)

@server.route('/index')defmy_page():

f=open('index.html',encoding='utf-8')

res=f.read()

f.close()returnres

server.run(port=8888)

3、执行后网页显示如下:

1352084-20181106153920566-738465565.png

举例3:登录接口

flask获取请求参数、连接数据库

1、传参

2、执行sql查数据库(已有该表)

3、返回结果

importflaskimportjsonimporttools

server=flask.Flask(__name__)

@server.route('/login',methods=['post'])deflogin():#登录需要两个参数,name和pwd

uname=flask.request.values.get('username')#传参,前面的是变量,括号里面是key

passwd=flask.request.values.get('password')#args只能获取到跟在url后面的参数,所以我们改用values

if uname and passwd:#非空为真

#需要先写一个导入数据库的函数,例如我写了一个名称为tools的函数(如图),放在另一个python文件中,import tools进行调用。当然也可以直接写在本python文件中,但是显得会累赘。

sql="SELECT * FROM app_myuser WHERE username='%s' AND passwd='%s';"%(uname,passwd)

result= tools.my_db(sql)#执行sql

ifresult:

res={"error_code":1000,"mag":"登录成功"}#接口返回的都是json,所以要这样写。先导入json模块,import json。

else:

res= {"error_code": 3001, "mag": "账号或密码错误!"}else:

res={"error_code":3000,"mag":"必填参数未填,请查看接口文档!"}return json.dumps(res,ensure_ascii=False)#防止出现乱码;json.dumps()函数是将字典转化为字符串

server.run(port=8888)

操作数据库的函数如图:

importpymysqldefmy_db(sql):

conn=pymysql.connect(

host='118.24.3.40',

user='jxz',

password='123456',

db='jxz',

charset='utf8',

autocommit=True#自动提交

)

cur=conn.cursor(cursor=pymysql.cursors.DictCursor)#建立游标;默认返回二维数组,DictCursor指定返回字典;

cur.execute(sql)#execute帮你执行sql

res=cur.fetchall()#拿到全部sql执行结果

cur.close()#关闭游标

conn.close()#关闭数据库

return res #返回sql执行的结果

调用接口服务如图(借助postman):

1352084-20181106154859506-1747487657.png

举例4:新增学生接口

flask获取请求参数、连接数据库;入参是json类型,参数有限制。

importflaskimportjsonimporttools

server=flask.Flask(__name__)

@server.route('/add_student',methods=['post'])defadd_student():

params=flask.request.json #入参是字典json时用它,下面的代码要判断传入的参数是否是json类型

ifparams:

name=params.get('name')

sex=params.get('sex','男')#如果没有传。默认值是男

age=str(params.get('age'))#int

addr=params.get('addr')

grade=params.get('grade')

phone=str(params.get('phone'))#最少11位,不能重复

gold=str(params.get('gold',500)) #金币可以是小数,如果没有传默认是500

if name and age and addr and grade and phone:#必填参数校验

if sex not in['男','女']: #如果性别不是男或者女

res = {"error_code": 3003, "msg": "性别只能是男或者女"}elif not age.isdigit():#如果不是整数类型

res = {"error_code": 3004, "msg": "年龄输入错误"}elif len(phone)!=11 or notphone.isdigit():

res= {"error_code": 3005, "msg": "手机号输入错误"}elif not gold.isdigit() and not tools.check.float(gold):#如果不是整数也不是小数

res = {"error_code": 3006, "msg": "金币输入错误"}else:

sql="select* from app_student where phone='%s';"%phone #查看数据库中是否有这个手机号,有的话说明重复

result = tools.my_db(sql) #执行sql

ifresult:

res= {"error_code": 1000, "msg": "手机号已经存在"}else:

sql= "INSERT INTO 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(sql)

res= {"error_code": 200, "msg": "新增成功!"}else:

res= {"error_code": 3007, "msg": "必填参数未填写"}else:

res={"error_code":3002,"msg":"入参必须是json类型"}return json.dumps(res,ensure_ascii=False)#防止出现乱码

server.run(port=8888)

调用接口服务如图(借助postman):

1352084-20181106155752838-1883256171.png

举例5:上传文件接口

上传文件时加上当前日期

importflaskimportjsonimportdatetime

server=flask.Flask(__name__)deffile_upload():

f=flask.request.files.get('wjm',None)#上传文件,取一个名字,再给名字一个默认值None

if f:#如果文件不为空

cur_time=datetime.datetime.now().strftime("%Y%m%d%H%M%S")#如果上传同一个文件两次,会被覆盖,所以加一个当前日期,并指定日期格式strftime("%Y%m%d%H%M%S")

new_file_name=cur_time+f.filename#新文件名=时间+原来的文件名

f.save(new_file_name)#保存文件

res={"msg":"文件上传成功"}else:

res={"msg":"没有上传文件"}return json.dumps(res,ensure_ascii=False)#防止出现乱码

server.run(port=8888)

调用接口服务如图(借助postman):

1352084-20181106155959323-1749783209.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/812500
推荐阅读
相关标签
  

闽ICP备14008679号