flask-restful写restful api接口

Posted 编程杂谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask-restful写restful api接口相关的知识,希望对你有一定的参考价值。


一次项目实战


使用sublime text 3,配合插件做IDE

python + flask-restful + nginx + mysql

开发Mac os 

正式linux 


项目结构

从功能扩散的角度讲:

1,app.py优先创建

用来初始化应用,mysql配置,跨域问题配置,创建api,创建db,创建迁移等

2,run.py

引入app api等对象,添加所有接口,然后程序从这里启动

3,requirements

用到的包

4,resource就是各种接口类

5,model.py所有数据的表,

这里需要改,将每个表作为一个文件

6,fabfile.py自动化部署脚本



flask-restful

非常简单,需要当作接口的,都写一个类,继承自restful.Resource

然后api.add_resource()

添加即可

======

======

划重点

1,所有功能性接口开发完了,你会发现,mmp,这每个接口如何验证登录身份信息?难道要回过头去为每个接口的get post put delete等方法写重复性的代码?

我找到的认为友好的方案:

flask_restful.Resource有个属性:method_decorators

他是一个数组,接收一个方法,这个方法会在请求到达get post等方法之前操作,所以

我另外写一个类,继承自flask_restful.Resource,将属性method_decorators,写上一个校验身份的方法,然后所有需要身份验证的,一般除了  || 登录||注册||找回密码||  等不需要,其他都会需要,

所以,这三个的resource,继承自原来的Resource,而其他的接口类,都继承我们自己写的


如下:

class Login (flask_restful.Resource):

class Register(flask_restful.Resource):


class LTResource(flask_restful.Resource):

    method_decorators=[]


class Customer (LTResource):


======



使用flask-sqlalchemy中有几个注意的点

1,更新数据,一般的mysql中肯定有个字眼update,但是flask-sqlalchemy中不是,是通过找出该行数据,然后执行跟新增一样的方法db.session.add(obj)

2,删除一行数据时,如果这行数据的某个字段是另外一张表的外键,也就是有关联关系,删除会失败,需要将与其有关的数据先删除,才能删除自己

3,数据库结构迁移,本地需要执行python run.py db migrade -m '修改信息'   ----(这里的修改信息,到时会在migration-》version中的文件名出现),然后再执行python run.py db upgrade,而服务端只需要执行后者,

我们的数据库中根据ID,决定最后一次更新到的分支,简而言之,仔细看为什么更新会失败就好了

4,mysql中最最最坑的,编码类型,数据库要改,数据表要改,每个字段都要改,my.cnf(改数据库),不然别说为什么都是问好,因为默认安装的mysql,有部分编码是latine xxx

5,获取某张表中的关联字段,lazy = selected join dynamic。。。

6,python2.x 找不到mysql-python ,用pymysql代替,但是要特殊处理一下

***********************

中文报错问题

***********************

写好了接口,部署好项目,开始请求,跑出是 ascii 128 什么的,简而言之,说中文有问题,这时候,简单的#-*-coding:utf8-*-,就需要每个文件都这么写,有个修改site-package配置文件的方法,可以使整个环境都是utf8

#import sys

reload(sys)

sys.setdefaultencoding('utf-8')



nginx.conf:

1,根据请求的ip或者域名,指向不同的项目,但是要注意,为静态文件,js。css。jpg等也写好

2,nginx -s reload












以上是关于flask-restful写restful api接口的主要内容,如果未能解决你的问题,请参考以下文章

python 具有Flask-Restful的基本API服务器

Flask-RESTful - 上传图片

Flask-Restful 中的中止方法忽略 CORS 选项

Flask-RESTful API:多个复杂的端点

如何将 flask.url_for() 与 flask-restful 一起使用?

学习 Flask 扩展 Flask-RESTful