编写api接口
小屌丝:小鱼哥,你这周干啥了? 一周没更新博文了
小鱼:嗯,确实时间过得很快,这一周,我在忙乎一件大事啊!
小屌丝好奇了:挖草~~ 鱼哥,借一步说话,啥事情啊,能让你这么忙活??
小鱼:这… 休想用一顿烧烤贿赂我…
小屌丝:赶紧的吧,鱼哥,两顿,连吃带拿的那种,行不?
小鱼:嗯… 行吧,透露一点点,跟银子有关…
小屌丝:啥啊,再具体点??
小鱼:哈哈,你这句 “再具体点”,让我想起了曾经一个面试官,可能是能力有限,亦或者是… 在面试的时候,说的就差直接把代码+标注 写在纸上了,然鹅,那位面试官还是说,再具体点…
小屌丝:别打岔,3顿烧烤,不能再多了…
小鱼:嗯,好的,那透露一点点,关于我这周忙活的内容,会有专门一篇博文分享出来,据说挺牛×的,如果技能全部掌握,再加上自己的实际项目经验,发挥正常,遇到很nice的面试官,P7的offer,七八不离十吧
小屌丝:为啥要加上,“遇到很nice的面试官”?
小鱼:因为观念啊,有的时候,即使你能力再强,技术再厉害,公司很棒,但是与面试官八字不合,那也得say 拜拜~ ~
>>> 后期,小鱼也会针对遇到的各种面试官大佬,写一篇文章,很有趣的~ 一句成语**大千世界,无奇不有**来体现!
每次都被小屌丝带跑偏,
言归正传,接着上一篇《Python3,网站搭建之构建Flask项目,带你启动web服务! 》
开启我们今天的任务:编写api接口,让前端页面显示数据。
1. 安装第三方模块
1.1 flask_restplus 安装
cmd窗口,直接pip安装
pip install flask_restplus
1.2 werkzeug 安装
cmd窗口,直接pip安装
pip install werkzeug == 0.16.0
这里说一下,为啥安装旧版本,因为新版本(1.0.1),和flask不兼容,
会出现这个报告:
ImportError: cannot import name 'cached_property' from 'werkzeug'
2. 编写api接口
2.1创建api
这段代码在apis文件夹下的__init__.py编写
init.py
# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-09
"""
from flask_restplus import Api
from PaperWeb.Services import app
#创建api
api = Api(
app,
version='0.1.0',
title='papers api ',
description='论文分享网站',
# authorizations={} #认证
ui = True
)
#导入papers 所有的内容,以便方便执行
from PaperWeb.Services.apis.papers import *
2.2 创建papers
这个文件,主要是编写创建api的处理逻辑
papers.py
# -*- coding:utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-09
"""
#编写api逻辑
from flask_restplus import Resource
from PaperWeb.Services.apis import api
from flask import request
from PaperWeb.Services.models.papers import PaperModel
class PapaerParsers(object):
#定义一个静态方法
#静态方法的作用:不需要实例化类,就可以直接调用对应的方法
@staticmethod
def getpaperlist():
#解析器
parser =api.parser()
#往解析器里面添加参数,required = True 表示必传项
parser = parser.add_argument('index',type = int,help ='第几页',required = True)
parser = parser.add_argument('count',type = int,help ='一页包含的数据',required = True)
return parser
#创建获取接口的列表的类
class PaperList(Resource):
#运用装饰器,将解析器运用到get方法
@api.expect(PapaerParsers.getpaperlist())
def get(self):
index = int(request.values.get('index',0))
count = int(request.values.get('count',0))
papers,has_next = PaperModel.get_paper(index, count)
#字典的形式,返回给前端
return {
'status':200,
'msg':'success',
'data': papers,
'index':index,
'count':count, #一页有多少个数据
'has_next':has_next #是否有下一页
}
#创建搜索的类,主要对作者进行搜索
class PaperSearch(Resource):
#获取数据
def get(self):
# 这部分内容,与PaperList方法内容一样,只不过是查询的对象不同,不做展开
pass
#定义一个命名空间
ns = api.namespace('papers',description = '论文接口')
#把ns 加载到PaperList中
ns.add_resource(PaperList,'','/')
#把ns 加载到PaperSearch中
ns.add_resource(PaperSearch,'/author','/author/')
2.3 获取papers列表的内容
我们在Services文件夹下,创建models文件夹,同时创建PaperModel 类
作用是为了,获取数据库的数据
papers.py
# -*- coding:utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-9-09
"""
from PaperWeb.Services.libs.mysql import db
class PaperModel(object):
#静态方法的作用:不需要实例化类,就可以直接调用对应的方法
@staticmethod
def get_paper(index,count):
#获得papers列表的内容
sql = f'''
SELECT
id,title,url
FROM
papers
WHERE
is_delect =0
LIMIT{(index -1) * count},{count+1}
'''
result = db.query(sql)
if not result:
return [],0
if len(result) ==count +1:
result.pop()
has_next = 1 # 是否有下一页
else:
has_next = 0
return result,has_next
编写完上面的代码,我们就可以直接运行main.py文件了
然后就是完美的页面展示了~ ~
3. 总结
到现在,除了页面样式,功能部分,已经分享的差不多了。
关于页面样式,咱的js确实无法跟前端大佬相提并论,
只要功能没问题,我觉得,还算合格!!
如果还不太清楚网站创建流程,小鱼在重新上链接,按照顺序点击,学习就好了。
1.《Python3,网站搭建之数据库表设计及数据存储!》
2.《Python3,网站搭建之构建Flask项目,带你启动web服务! !》
3.《Python3,网站搭建之编写API接口,让前端页面展示数据!》
小屌丝:谢谢鱼哥的分享,那请问,啥时候分享你说的那几篇文章啊??
小鱼:嗯… 别着急,该来的,总会来!!