从零开始:学flask 服务端API

目录


初识flask

*学习flask框架时,我只有少量的网络基础,所以本文会涉及很少的学术知识,用最通俗易懂的方法来介绍简单flask API是如何编成的。

flask的安装

flask安装是在virtualenv虚拟环境下进行的
所以首先利用pip进行virtualenv的编写

pip install virualenv

新建一个目录,在里面创建virualenv环境,我的是flaskdemo,在cygwin下运行:

mkdir flaskdemo
cd flaskdemo
pip install virtualenv
virtualenv –system-site-packages venv #混合虚拟环境
ps 最好让env使用系统安装好的第三方库,不然还要自己在虚拟环境中安装,这里走了不少坑。。
这样flaskdemo下会生成env文件,之后激活虚拟环境
source env\Scripts\activate
pip install Flask

之后我把所有编写的python文件都存放在Scripts中运行

开发flask站点从hello world程序开始

from flask import Flask

app=Flask(__name__)              #建立一个Flask类的实例app
@app.route('/')                        #使用route()装饰器告诉Flask紧跟着的函数装载在哪个URL地址中
def hello_flask():
    return 'Hello World!'           #hello_flask()函数被加载在./这个URL地址中
if __name__=='__main__':
    app.run()                              #app.run()进入flask消息循环

将代码文件保存为helloworld.py,通过cygwin运行
$ python helloworld.py
* Running on http://127.0.0.1:5000/
打开网页http://127.0.0.1:5000/就可以了

模板渲染

在上述程序中实现了向客户端返回字符串这样的简单工作。在网站建设中,服务器需要使用HTML与浏览器进行交互。Flask使用Jinjia模板引擎实现了自动模板渲染功能,jinjia模块通过加载已经写好的HTML模板文件,并可在其中嵌入必要的参数。
代码块语法遵循标准markdown代码,例如:

from flask import render_template

@app.route('/index/<name>')         #一个函数可以通过参数变量绑定到多个url地址上<name>
def hello(name):
    return render_template('hello.html',name=name)

本例把模板文件的文件名传递给了render_template(),flask会去网站的templates目录下加载该文件

hello.py
templates
/hello.html

hello.html模板的编写就不重复了

路由详解

带变量的路由
from flask import Flask
...
@app.route('/hello/<name>')         
def showhello(name):
    return 'hello %s' % name

还可以为变量指定类型

from flask import Flask
...
@app.route('/index/int:<num>')          
def count(num):
    return '%d' % (num+1)
HTTP方法绑定

网站通过HTTP与浏览器或其他客户端进行交互,HTTP访问一个URL时可以使用几种不同的访问方式,GET、POST、HEAD、DELETE等。

from flask import Flask
...
@app.route('/hello/',methods=['GET'])           
def get_hello():
    name='gao'
    return name

Json数据

Json入门请看http://www.runoob.com/json/json-tutorial.html
本文只关注flask框架中怎样前端传递或者接收Json文件
利用flask的request.form.get()方法和request.get_data()方法

from flask import Flask,jsonify,request
app=Flask(__name__)
@app.route('/usejson',methods=['POST']
book=dict('name':'python','price':35,'date''2016-5')
def usejson():
    data=json.loads(request.form.get('data') #或者data=json.loads(request.get_data())
    book['name']=data["name"] #在本地更改book字典
    book['date']=data["date"]
    return jsonify(book) #用flask的jsonify方法,组装json格式

用Flask写个接受并处理图片的API

服务端
from flask import Flask,request
import annotate
app=Flask(__name__)


@app.route('/',methods=['POST'])
def upload():
    file=request.files['file']
    prediction=annotate.image_annotate(file)
    return '%s' % prediction
if __name__=='__main__':
    app.run()
客户端
import requests
#file=open('C:/users/cutegao/Desktop/1.jpg','rb')
url='http://127.0.0.1:5000/'
files={
       'file':open('1.jpg','rb')
     }

r=requests.post(url,files=files)
print r.text

主要参考博客
[1] http://www.cnblogs.com/vovlie/p/4178077.html
[2] http://www.programcreek.com/python/example/51528/flask.request.files
[3] http://www.jb51.net/article/85863.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值