一个一起做网站,惠来网站建设,上海人才市场档案存放中心,源码网站大淘客cms一直在用node.js做后端#xff0c;要逐步涉猎大数据范围#xff0c;注定绕不过python#xff0c;因此决定把一些成熟的东西用python来重写#xff0c;一是开拓思路、通过比较来深入学习python#xff1b;二是有目标#xff0c;有动力#xff0c;希望能持之以恒的坚持下去…一直在用node.js做后端要逐步涉猎大数据范围注定绕不过python因此决定把一些成熟的东西用python来重写一是开拓思路、通过比较来深入学习python二是有目标有动力希望能持之以恒的坚持下去。项目介绍用python语言来写一个restful api service数据库使用mysql。因为只做后端微服务并且ORM的实现方式采用自动生成SQL的方式来完成因此选择了轻量级的flask作为web框架。如此选择主要目的是针对中小规模的网络应用能充分利用关系数据库的种种优势来实现丰富的现代互联网应用。REST的六个特性Client-Server服务器端与客户端分离。Stateless(无状态)每次客户端请求必需包含完整的信息换句话说每一次请求都是独立的。Cacheable(可缓存)服务器端必需指定哪些请求是可以缓存的。Layered System(分层结构)服务器端与客户端通讯必需标准化服务器的变更并不会影响客户端。Uniform Interface(统一接口)客户端与服务器端的通讯方法必需是统一的。Code on demand(按需执行代码)服务器端可以在上下文中执行代码或者脚本restful apirestful api 的概念就不介绍了。这里说一下我们实现协议形式[GET]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen[POST]/rs/user[/{id}][PUT]/rs/user/{id}[DELETE]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen说明rs为资源标识第二节user会被解析为数据库表名查询时id为空或0时id会被忽略即为列表查询新建和修改除接收form表单外url中的id参数也会被合并到参数集合中删除同查询。让flask支持正则表达式flask默认路由不支持正则表达式而我需要截取完整的URL自己来解析经查询按以下步骤很容易完成任务。使用werkzeug库 from werkzeug.routing import BaseConverter定义转换器class RegexConverter(BaseConverter):def __init__(self, map, *args):self.map mapself.regex args[0]注册转换器 app.url_map.converters[regex] RegexConverter用正则来截取url : app.route(/rs/, methods[PUT, DELETE, POST, GET])几点疑问正则(.*)理论上应该是匹配任何除回车的所有字符但不知道为什么在这里不识别问号()我用request.data来取表单数据为何request.form取不到/rs/后若加个反斜杠(/rs//)request.data就取不到数据为什么解析json数据解析json数据很容易但我需要对客户端送上来的数据进行校验下面是用异常处理又只解析一次的解决方案。def check_json_format(raw_msg):try:js json.loads(raw_msg, encodingutf-8)except ValueError:return False, {}return True, jsURL解析按既定协议解析URL提取表名为生成sql组合参数集合。app.route(/rs/, methods[PUT, DELETE, POST, GET])def rs(query_url):(flag, params) check_json_format(request.data)urls query_url.split(/)url_len len(urls)if url_len 1 or url_len 2 and url_len % 2 1:return The params is wrong.ps {}for i, al in enumerate(urls):if i 0:table alelif i 1:idd alelif i 1 and i % 2 0:tmp alelse:ps[tmp] alps[table] tableif url_len 1:ps[id] iddif request.method POST or request.method PUT:params dict(params, **{table: ps.get(table), id: ps.get(id)})if request.method GET or request.method DELETE:params psreturn jsonify(params)完整代码git clone https://github.com/zhoutk/pyrest.gitcd restexport FLASK_APPindex.pyflask run小结今天利用flask完成了web基础架构能够正确解析URL提取客户端提交的数据按请求的不同方式来组合我们需要的数据。希望对大家的学习有所帮助也希望大家多多支持脚本之家。