使用Flask+MongoDB实现基于REST的接口简单操作

使用Flask+MongoDB实现基于REST的接口简单操作

 

目录

前言

1 准备工作

2 具体实现

 

 


前言

最近在捣鼓如何使用阿里云服务器搭建一个简单的基于Flask框架的后端接口

 

下面简单说一下搭建Flask服务器端遇到的问题:

首先,Flask自带了一个服务器,直接使用很方便。

 

使用nginx来部署Flask相关服务

 

具体配置设置方法见:阿里云服务器 ECS 访问不了公网 ip 可能的原因及解决方法

附:

 使用Flask+MongoDB实现基于REST的接口简单操作

 

 


1 准备工作

导入Flask及相关扩展:

pip install flask

pip install flask-pymongo

pip install tornado(此处可选可不选。如果不选择,直接使用Flask自带的服务器部署即可;如果选择,可以使用tornado部署)

 

MongoDB数据库绑定服务ip地址设置(PS:如果不进行下述设置,默认ip为本机127.0.0.1地址):

 

什么是nginx呢?

摘抄自百度百科(https://baike.baidu.com/item/nginx/3817705?fr=aladdin)的一段解释:Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,*使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

 


2 具体实现

看到下面具体实现代码,会让大家感叹,Python的确是一个优美的语言,Flask框架也的确是对应小而又轻量级的框架美称呀。使用MongoDB数据库,操作数据库也变得极为简单。

 

在看下面代码之前,需要简单说一下REST的基本思想原理,也相当于是我自己进一步加深印象吧。下面解释应用自阮一峰博客的一个评论,我感觉这样描述的很在理。

 

REST四个基本原则:
1.使用HTTP动词:GET POST PUT DELETE;
2.无状态连接,服务器端不应保存过多上下文状态,即每个请求都是独立的;
3.为每个资源设置URI;
4.通过XML JSON进行数据传递;
实现上述原则的架构即可称为RESTFul架构。
1.互联网环境下,任何应用的架构和API可以被快速理解;
2.分布式环境下,任何请求都可以被发送到任意服务器;
3.异构环境下,任何资源的访问和使用方式都统一;

 

看到上面介绍,既然说了REST方式使用HTTP动词GET POST PUT DELETE来实现相关操作。

那么下面代码就简单实现一下这四个动词的具体操作功能。

GET:实现从服务器后台获取数据功能,例如登陆接口功能实现;

POST:实现向服务器后台提交数据功能,例如注册接口功能实现;

PUT:实现修改服务器后台已有数据功能;

DELETE:实现删除服务器后台已有数据功能。

 

看完上面介绍,下面就请看代码:

如果不使用tornado,直接使用下面一个mongo.py文件中代码即可实现本文标题所述功能:

使用Flask+MongoDB实现基于REST的接口简单操作
#coding=utf-8
#mongo.py
from flask import Flask,abort
from flask import jsonify
from flask import request
from flask_pymongo import PyMongo


app = Flask(__name__)

app.config['MONGO_DBNAME'] = 'rest'
app.config['MONGO_URI'] = 'mongodb://172.18.252.20:27017/rest'  #如果部署在本上,其中ip地址可填127.0.0.1

mongo = PyMongo(app)

@app.route('/login', methods=['GET'])
def get_all_users():
  star = mongo.db.userInfo.find()
  output = []
  for s in star:
    output.append({'name' : s['name'], 'pwd' : s['pwd']})
  return jsonify({'result' : output})


@app.route('/register', methods=['POST'])
def add_user():
  star = mongo.db.userInfo
  name = request.json['name']
  pwd = request.json['pwd']
  star_id = star.insert({'name': name, 'pwd': pwd})
  new_star = star.find_one({'_id': star_id })
  output = {'name' : new_star['name'], 'pwd' : new_star['pwd']}
  return jsonify({'result' : output})

@app.route('/modify/<string:name>', methods=['PUT'])
def update_user(name):
    user = mongo.db.userInfo.find({"name":name})
    output = []
    for s in user:
      output.append({'name': s['name'], 'pwd': s['pwd']})
    if len(output) == 0:
      abort(404)
    mongo.db.userInfo.update({"name":name},{'$set':{"name":"LZ111"}})
    return jsonify({'result': output})

@app.route('/delete/<string:name>', methods=['DELETE'])
def delete_user(name):
    user = mongo.db.userInfo.find({"name": name})
    output = []
    for s in user:
      output.append({'name': s['name'], 'pwd': s['pwd']})
    if len(output) == 0:
      abort(404)
    mongo.db.userInfo.remove({'name': name})
    return jsonify({'result': True})



if __name__ == '__main__':
    # app.run(host = '0.0.0.0', port = 80, debug = True)
    app.run()
使用Flask+MongoDB实现基于REST的接口简单操作

 

如果使用tornado,新建一个tornado_server.py文件,添加以下代码,作为Flask服务启动部署,也可以实现相关功能:

使用Flask+MongoDB实现基于REST的接口简单操作
#coding=utf-8
#tornado_server.py
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop

from mongo import app


http_server = HTTPServer(WSGIContainer(app))
# http_server.listen(9000)  #此时,开启端口9000,默认本机127.0.0.1的IP地址
http_server.bind(80, "172.18.252.20")# 开启端口为9000,172.18.252.20为内网ip地址,也可以设置为0.0.0.0,
http_server.start(1)
IOLoop.instance().start()
使用Flask+MongoDB实现基于REST的接口简单操作

 

看完上面代码,点击运行,即可实现相关接口功能了。既然是接口,GET方式还好说,如果是POST方式,使用浏览器就不那么好操作了,此时我们需要使用一款接口测试软件,在这里我推荐使用Postman(PS:Postman百度经验介绍Postman官网下载链接  , 附加百度云盘WIN64位下载链接:https://pan.baidu.com/s/12t09OMcrezgNY3_JfYFx8g 密码:z1vk),如果有同学使用基于Linux相关系统,推荐使用CURL来实现。

 

下面就正式开始使用Postman测试Get、Post、Put和Delete方式接口:

Get方式,选中下图中下拉框GET方式,直接输入URL,然后点击Send蓝色按钮即可得到请求数据。

 使用Flask+MongoDB实现基于REST的接口简单操作

 

Post方式,选中下拉框中Post方式,这里由于要发送数据,需要稍微设置一下。

首先,在下图中Headers中要选择Content-Type的数据方式,这里我选择的是json格式:

 使用Flask+MongoDB实现基于REST的接口简单操作

然后,点开下图中Body,选择raw,添加要存入的json格式数据,如下:

 使用Flask+MongoDB实现基于REST的接口简单操作

最后,点击Send按钮,在最下面出现相关提示信息后,即可查看Post请求结果。

 

Put方式操作和Get方式雷同,不同的是需要选中操作方式为Put,具体如下图:

 使用Flask+MongoDB实现基于REST的接口简单操作

 

Delete方式和Put请求几乎一样,不同的是一个执行修改操作,一个执行删除操作而已,具体如下图:

 使用Flask+MongoDB实现基于REST的接口简单操作

 

基本操作就这样,看完上面代码,发现使用FLask+MongoDB写后端接口是不是特别简单?

 

 

参考资料:
1.Designing a RESTful API with Python and Flask(PS:附加一个中文版,不过里面代码有bug)

2.理解RESTful架构

3.MONGODB RESTFUL API WITH FLASK

[使用Flask+MongoDB实现基于REST的接口简单操作 - 舞动的心 - 博客园](https://www.cnblogs.com/liuzhen1995/p/8107905.html )]
上一篇:流程控制之while循环


下一篇:Linux下history命令用法