Python3,网站搭建之编写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接口,让前端页面展示数据!

小屌丝:谢谢鱼哥的分享,那请问,啥时候分享你说的那几篇文章啊??
小鱼:嗯… 别着急,该来的,总会来!!

猜你喜欢

转载自blog.csdn.net/wuyoudeyuer/article/details/108484390