从零开始:学flask 服务端API

来源:互联网 发布:淘宝0秒付款 编辑:程序博客网 时间:2024/05/29 19:31

目录

    • 目录
    • 初识flask
      • flask的安装
      • 开发flask站点从hello world程序开始
      • 模板渲染
      • 路由详解
        • 带变量的路由
        • HTTP方法绑定
    • Json数据
    • 用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 Flaskapp=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,requestapp=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,requestimport annotateapp=Flask(__name__)@app.route('/',methods=['POST'])def upload():    file=request.files['file']    prediction=annotate.image_annotate(file)    return '%s' % predictionif __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

原创粉丝点击