目录 style="font-size: 14pt;">前言 style="font-size: 14pt;">1策动干活 style="font-size: 14pt;">2具体完毕     前言 前几天在捣鼓怎样选用Ali云服务器搭建多少个简单易行的基于Flas" />

金沙澳门官网登录-www.js8.com-金沙澳门官网下载app

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

style="font-size: 18pt;">目录

style="font-size: 14pt;">前言

style="font-size: 14pt;">1 策动干活

style="font-size: 14pt;">2 具体完毕

 

 


前言

前几天在捣鼓怎样选用Ali云服务器搭建多少个简单易行的基于Flask框架的后端接口,刚开头为了图实惠,就直接买了三个Windows Server 2009体系服务器,那也埋下了相当大的坑。

 

服务买下来后,会给你三个公网IP和内网IP,由于是第三回学习搭建后端接口,对于怎么样正确使用Ali云服务器,来管理好公网IP和内网IP之间的涉及埋下了超大的坑,真是对应的一句话:技艺的成材往往是一步一个坑。

 

使用Flask+MongoDB实现基于REST的接口简单操作。上边简单说一下搭建Flask服务器端蒙受的主题材料:

首先,Flask自带了三个服务器,直接运用很方便,不过这么些服务器的习性太低,但是对于调试和上学可能游刃有余。刚起头把代码放到Ali云服务器上,并跑通后,测验接口时公网IP不可能访谈,那时候作者认为是Flask自带服务器的难点,即因为Flask自带服务器原因形成力不胜任采取公网IP访谈。

 

那么,难点应际而生了,就要物色覆灭办法吧,网络搜索资料提交参照意见:使用nginx +gunicorn来构造Flask相关服务,可防止止公网IP不能够访谈难点。然后,笔者就去找资料,安装gunicorn,结果运转测验时一贯报错,最后开采gunicorn不扶助Windows系统,那也太坑了,早精通我当下买服务器时就不应当图平价,间接买叁个基于Linux的系统了。

 

这几天,新的难点又来了,既然不能够使用nginx +gunicorn来布署Flask相关服务,这将要运用别的措施来消除呢,英特网资料参照结果:使用tornado。好,那么作者又来查阅学习tornado计划应用开辟文书档案,依据支付文书档案陈设完结后,在服务器上跑通后,开掘还是不可能接纳公网IP举办接口访谈和测验。

 

到了那边,就让小编反省,那一个难道真是Flask安顿应用服务器难题啊?后来,就在网络找到了大器晚成篇关于Ali云公网IP不可能访谈难题的稿子,开掘那个供给谐和去Ali云官英特网去配置安装。

 

即以上蒙受的难点,压根就不是Flask布置服务器难点,是本身未有搞精晓Ali云服务器怎么着运用的标题......

 

实际配置安装方法见:Ali云服务器 ECS 访谈不了公网 ip 恐怕的由来及减轻情势

附:

 图片 1

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

 


1 筹算职业

使用Flask+MongoDB实现基于REST的接口简单操作。导入Flask及相关增加:

pip install flask

pip install flask-pymongo

pip install tornado(此处可选可不选。假设不选取,间接行使Flask自带的服务器安插就能够;假设采取,能够应用tornado安插)

 

MongoDB数据库绑定服务ip地址设置(PS:倘使不开展下述设置,暗中同意ip为本机127.0.0.1地址):

开采CMD,踏向MongoDB安装的bin文件夹下,譬如小编的设置目录为:C:Program FilesMongoDBServer3.2bin

然后在CMD中输入mongod.exe --bind_ip yourIPadress

其间参数--bind_ip意思:绑定服务IP,若绑定127.0.0.1,则只好本机访谈,不钦命默许本地全体IP。(注意:在那之中yourIPadress填写自个儿搭建服务器的内网ip地址)

实际如下图:

 图片 2

图片 3

 

开启Flask自带的服务器,一般选取app.run(卡塔尔(英语:State of Qatar),在那之中平日采取如下四个参数:host(钦命ip地址,假设不填写,默感到127.0.0.1卡塔尔、port(内定使用的端口,如若不钦定,默感觉5000端口卡塔尔(英语:State of Qatar)、debug(开启调节和测验形式,私下认可值为Flase,即不开启调试方式,如要开启则足以设置为True卡塔尔。

 

假设在服务器上搭建Flask接口相关服务,设置在那之中host=’0.0.0.0’表示在公网ip下的同叁个局域网段全部ip都得以访问那一个服务,若是把host钦定为内部四个内网ip地址,则那些局域网下全体顾客能够通过访谈这么些钦命的ip地址访问Flask服务。

 

背后介绍能够微微看看,也相当于是询问一下nginx +gunicorn以至tornado的基本概念。也得以忽视,直接查看2 具体落实

 

使用nginx +gunicorn来布局Flask相关服务,即不应用Flask自带的服务器。

 

探问地点的安顿方式,作为初读书人,不免会有新的难点,什么是nginx和gunicorn呢?

本人本人也是新接触的,查看了瞬间英特网资料,大约领会了一下。

 

什么是nginx呢?

摘要自百度百科() 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在三个BSD-like 合同下发行。其天性是侵吞内部存款和储蓄器少,并发力量强,事实上nginx的面世能力确实在同连串的网页服务器中呈现较好,中夏族民共和国新大陆使用nginx网址客商有:百度、京东、果壳网、搜狐、Tencent、天猫等。

 

什么是gunicorn呢?

摘要自英特网一次小说( WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker格局,具备应用特轻便,轻量级的能源消耗,以致高品质等特色。

Gunicorn 服务器作为wsgi app的容器,能够与种种Web框架宽容(flask,django等),得益于gevent等本领,使用Gunicorn能够在中央不转移wsgi app代码的前提下,大幅度提升wsgi app的习性。

 

看样子地方的化解办法,试着搭建筑和安装装,开采gunicorn不帮衬Windows系统,坑啊,早知道那样就买一个Linux服务器。

选择gunicorn报错新闻:

Traceback (most recent call last):

  File "d:program files (x86)python27Librunpy.py", line 174, in _run_module_as_main

    "__main__", fname, loader, pkg_name)

  File "d:program files (x86)python27Librunpy.py", line 72, in _run_code

    exec code in run_globals

  File "E:WorkPlaceGit_pythonliu_demovenvScriptsgunicorn.exe__main__.py", line 5, in <module>

  File "e:workplacegit_pythonliu_demovenvlibsite-packagesgunicornappwsgiapp.py", line 10, in <module>

    from gunicorn.app.base import Application

  File "e:workplacegit_pythonliu_demovenvlibsite-packagesgunicornappbase.py", line 12, in <module>

    from gunicorn import util

  File "e:workplacegit_pythonliu_demovenvlibsite-packagesgunicornutil.py", line 9, in <module>

    import fcntl

ImportError: No module named fcntl

 

 图片 4

 

只是笔者的服务器依旧是Windows版本,Flask服务器情形依旧要搭建,那么得使用什么方案吗?

那边推荐使用tornado。

那么怎么着是tornado呢?

摘抄至网络后生可畏篇作品()介绍:Tornado 是 FriendFeed 使用的可扩大的非拥塞式 web 服务器及其相关工具的开源版本。这几个 Web 框架看起来有个别像 web.py 或者 Google 的 webapp,然则为了能立竿见影选取非梗塞式服务器情状,那一个Web 框架还隐含了部分相关的有用工具 和优化。

Tornado 和当今的主流 Web 服务器框架(包罗大多数 Python 的框架)有着显明的分别:它是非窒碍式服务器,何况速度极其快。得利于其 非拥塞的情势和对 epoll 的行使,Tornado 每秒能够拍卖数以千计的总是,那意味对于实时 Web 服务来讲,Tornado 是七个优秀的 Web 框架。大家开辟那个 Web 服务器的重大目标正是为着处理FriendFeed 的实时功用 ——在 FriendFeed 的选拔里每三个平移顾客都会维持着一个服务器连接。(关于怎样扩大体量服务器,以处理数以千计的顾客端的连年的主题素材,请参阅 C10K problem。)

 

至于实际怎么选拔,能够查阅上边文章介绍,也能够参见下文的现实性运用代码。

 

 


2 具体完毕

见到上边具体落实代码,会让大家感叹,Python实乃七个华美的语言,Flask框架也确确实实是对应小而又轻量级的框架美称呀。使用MongoDB数据库,操作数据库也变得极为简略。

 

在看上面代码此前,供给轻便说一下REST的骨干构思原理,也相当于是自己自个儿越发激化影象吧。上面解释应用自阮大器晚成峰博客的一个讲评,笔者感觉那样描述的很合理。

 

REST两个为主规范:
1.使用HTTP动词:GET POST PUT DELETE;
2.无状态连接,服务器端不应保存过多上下文状态,即每一种须要都以独立的;
3.为各类财富设置UEvoqueI;
4.由此XML JSON实行数量传递;
达成上述原则的构造就可以称为RESTFul结构。
1.网络境况下,任何利用的架商谈API能够被超快掌握;
2.布满式情形下,任何须要都得以被发送到放肆服务器;
3.异构景况下,任何财富的拜访和行使情势都统生龙活虎;

 

来看上边介绍,既然说了REST形式使用HTTP动词GET POST PUT DELETE来兑现相关操作。

那就是说上边代码就归纳达成一下这多少个动词的具体操作成效。

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

POST:实现向服务器后台提交数据功用,举个例子登记接口作用达成;

PUT:达成修改服务器后台原来就有多少效用;

DELETE:完结删除服务器后台本来就有多少功用。

 

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

比方不采取tornado,直接行使上面四个mongo.py文件中代码就可以兑现本文题目所述成效:

#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()

 

只要利用tornado,新建一个tornado_server.py文件,增加以下代码,作为Flask服务运维计划,也能够兑现相关职能:

#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()

 

看完下面代码,点击运转,就可以达成相关接口功效了。既然是接口,GET情势幸亏说,倘诺是POST格局,使用浏览器就不那么好操作了,那时大家要求运用后生可畏款接口测量检验软件,在这里处本身推荐使用Postman(PS:Postman百度经历介绍,Postman官方网站下载链接),倘使有同学利用基于Linux相关系统,推荐应用CUTiggoL来贯彻。

 

上面就正式启幕选拔Postman测验Get、Post、Put和Delete格局接口:

Get情势,选中下图中下拉框GET情势,直接输入UTiggoL,然后点击Send原野绿按键就能够得到央浼数据。

 图片 5

 

Post格局,选中下拉框中Post情势,这里由于要发送数据,要求有个别设置一下。

率先,在下图中Headers中要挑选Content-Type的数目方式,这里作者接收的是json格式:

 图片 6

接下来,点开下图中Body,选取raw,加多要存入的json格式数据,如下:

 图片 7

最终,点击Send按键,在最上面现身成关提醒消息后,就可以查看Post乞请结果。

 

Put情势操作和Get格局形似,分歧的是内需选中操作方式为Put,具体如下图:

 图片 8

 

Delete方式和Put诉求大致生机勃勃致,差异的是三个实行修正操作,多个试行删除操作而已,具体如下图:

 图片 9

 

基本操作就这样,看完上边代码,发掘选择FLask+MongoDB写后端接口是或不是特意轻松?

 

 

参照他事他说加以考察资料:
1.Designing a RESTful API with Python and Flask(PS:附加贰个中文版,可是在这之中代码有bug)

2.理解RESTful架构

3.MONGODB RESTFUL API WITH FLASK

 

本文由金沙澳门官网登录发布于金沙澳门官网登录,转载请注明出处:使用Flask+MongoDB实现基于REST的接口简单操作

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。