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 中的中止方法忽略 CORS 选项