当前位置:   article > 正文

后端入门之Python实现一个简单接口编写_python接口怎么写

python接口怎么写

最近好像要转向后端了,故想提前学习下,实现一个简单接口编写,熟悉一下编写接口的流程和框架。写这个主要是记录一下自己的学习过程,以便后面温习。在Python实现一个简单接口编写之前需要了解一些后端开发的一些基本的知识、Flask框架和postman工具。

Flask与Django的区别

Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。

Flask 比 Django 更灵活 用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping 对象关联映射),或者需要与不同的工作流和模板系统交互。

Flask 在 Django 之后发布,现阶段有大量的插件和扩展满足不同需要 Django发布于2005年,Flask创始于2010年年中。

Flask框架入门

Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架的核心。

Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

Flask常用扩展包:

  • Flask-SQLalchemy:操作数据库;
  • Flask-migrate:管理迁移数据库;
  • Flask-Mail:邮件;
  • Flask-WTF:表单;
  • Flask-Bable:提供国际化和本地化支持,翻译;
  • Flask-script:插入脚本;
  • Flask-Login:认证用户状态;
  • Flask-OpenID:认证;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;
  • Flask-Admin:简单而可扩展的管理接口的框架

Flask的Hello World应用的代码是最简单的,只用在一个Python文件里码7行代码就够了。

  1. from flask import Flask
  2. app = Flask(__name__)
  3. @app.route("/")
  4. def hello():
  5.     return "Hello World!"
  6. if __name__ == "__main__":
  7.     app.run()

上面代码就已经是一个简单的 web 应用,从上面的 Hello World 应用的特点来看,一个没什么Python web开发经验的人就可以很快的上手开始撸代码。

Flask中文文档:欢迎使用 Flask — Flask 0.10.1 文档

JSON简介:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
这些特性使JSON成为理想的数据交换语言。

HTTP的请求方法:

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

就像前面所讲的一样,既然PUT和POST操作都是向服务器端发送数据的,那么两者有什么区别呢。。。POST主要作用在一个集合资源之上的(url),而PUT主要作用在一个具体资源之上的(url/xxx),通俗一下讲就是,如URL可以在客户端确定,那么可使用PUT,否则用POST。

综上所述,我们可理解为以下:

1、POST    /url      创建  
2、DELETE  /url/xxx  删除  
  1. 3、PUT /url/xxx 更新
  2. 4、GET /url/xxx 查看

Postman 简介:

Postman 是一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员应该是无人不晓无人不用!其主要特点 特点: 创建 + 测试:创建和发送任何的HTTP请求。

如果不了解Postman的,可以看以下链接,有详细的安装和使用方法教程:

Postman使用方法详解:Postman使用详解_大痴小乙的博客-CSDN博客

下面利用Python实现一个简单接口编写

先提取数据,编程实现,代码如下:

  1. # -*- coding: UTF-8 -*-
  2. import cx_Oracle
  3. import os
  4. def getcontent():
  5. conn = cx_Oracle.connect('abc/abd@192.168.123.456/data123')#根据自己的数据库地址进行填写
  6. cur = conn.cursor()
  7. sql = "SELECT XXNAME,XXCLASS,XXNUMBER,XXSCORE FROM TEST123 where rownum<5"
  8. cur.execute(sql)
  9. data = cur.fetchall()
  10. print(data)
  11. para = []
  12. for i in data:
  13. text = {'name':i[0],'class':i[1],'number':i[2],'score':i[3]}
  14. print(text)
  15. para.append(text)
  16. if __name__ == '__main__':
  17. getcontent()

结果:

  1. [('马云', '一年级', 1, 100), ('马风', '二年级', 1, 101), ('马雨', '三年级', 1, 99), ('马电', '五年级', 1, 88)]
  2. {'name': '马云', 'class': '一年级', 'number': 1, 'score': 100}
  3. {'name': '马风', 'class': '二年级', 'number': 1, 'score': 101}
  4. {'name': '马雨', 'class': '三年级', 'number': 1, 'score': 99}
  5. {'name': '马电', 'class': '五年级', 'number': 1, 'score': 88}
  6. Process finished with exit code 0

改为接口,用的Flask框架(可以对比看看需要改哪些地方):

Post请求:

  1. # -*- coding: UTF-8 -*-
  2. import cx_Oracle
  3. import os
  4. import json
  5. from flask_cors import *
  6. os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
  7. from flask import Flask,request
  8. app = Flask(__name__)
  9. @app.route('/index1', methods=[ 'POST'])
  10. def getcontent():
  11. conn = cx_Oracle.connect('abc/abd@192.168.123.456/data123')
  12. cur = conn.cursor()
  13. sql = "SELECT XXNAME,XXCLASS,XXNUMBER,XXSCORE FROM TEST123 where rownum<5"
  14. cur.execute(sql)
  15. data = cur.fetchall()
  16. # print(data)
  17. para = []
  18. for i in data:
  19. text = {'name':i[0],'class':i[1],'number':i[2],'score':i[3]}
  20. # print(text)
  21. para.append(text)
  22. return json.dumps(para, ensure_ascii=False, indent=4)
  23. if __name__ == '__main__':
  24. app.run(host='0.0.0.0', port=5590)

运行结果:

去postman查看结果:

一个简单的接口就实现了!!!

但是上面返回的是所有的数据,怎么根据条件去删选数据呢?比如我就想要 name = 马云 的那条数据,操作如下。

具体代码如下:

  1. # -*- coding: UTF-8 -*-
  2. import cx_Oracle
  3. import os
  4. import json
  5. from flask_cors import *
  6. os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
  7. from flask import Flask,request
  8. app = Flask(__name__)
  9. @app.route('/index1', methods=[ 'POST'])
  10. def indextest():
  11. inputData = request.json.get('inputData')
  12. data1 = getcontent(inputData)
  13. return data1
  14. def getcontent(inputData):
  15. conn = cx_Oracle.connect('abc/abd@192.168.123.456/data123') #连自己的数据库
  16. cur = conn.cursor()
  17. sql = "SELECT XXNAME,XXCLASS,XXNUMBER,XXSCORE FROM TEST123 where XXNAME='%s'"%(inputData)
  18. cur.execute(sql)
  19. data = cur.fetchone()
  20. print(data)
  21. result = {'name':data[0],'class':data[1],'number':data[2],'score':data[3]}
  22. return json.dumps(result, ensure_ascii=False, indent=4)
  23. if __name__ == '__main__':
  24. app.run(host='0.0.0.0', port=5590)

这样就可以通过输入参数,返回自己想要的结果。比如“inputData”为马云 ,在postman里测试输出的结果为 姓名为马云的 那条数据的结果:

Postman使用方法详解:Postman使用详解_大痴小乙的博客-CSDN博客

Flask中文文档:欢迎使用 Flask — Flask 0.10.1 文档

相关参考链接:https://www.cnblogs.com/testcoffee/p/6295970.html

                            Flask入门和Django的区别 - 简书

                            https://www.cnblogs.com/crss/p/8529002.html

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

闽ICP备14008679号