近期在做后台管理系统,同时也想让自己更加了解PYTHON这门语言,因此选择了使用FLASK WEB框架,如果你要问我什么是FLASK,看看下面一句,来自FLASK官方网站的介绍。
Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions. And before you ask: It's BSD licensed!
因为是管理系统,所以UI选择了一个比较简单好用的开源框架EASYUI,为什么选这个,因为以前使用,不过最近官网需要翻墙出去才能看,不知道为什么,呵呵。EASYUI基本都是使用异步请求,返回的都是JSON格式,方便使用。 EASYUI的缺点不支持IE 7 8 9 。
近期在使用EASYUI 的TREE组件时需要返回的格式如下:
[
{"id":1,"text":"test1"},
{"id":1,"text":"测试2"}
]
那在PYTHON里怎么返回这样的格式呢?其实非常简单,不需要拼写字符串,只需要使用 LIST 和DIC对象即可。
场景假设:如果你需要将公司的通过TREE组件显示出来,你需要定义一个company类 然后通过工具类的object2Json完成转换。
代码片段
#########################controller##########################
controller.py
#引入json模块
#!/usr/bin/env python
# encoding: utf-8
from flask import json
from flask import Blueprint #Blueprint是一个很强的机制,可以配置不同路径访问不同模块下的方法 可以实现MVC中的C机制
sample = Blueprint('sample',__name__)
@smaple.route('allRootCompany')
def allRootCompany():
companyService = CompanyService()
results = companyService.getROOTCompany() #读取数据
jsonData = [] #定义一个LIST对象
for result in results:
jsonData.append(JsonUtil.object2Json(result)) #包裹数据生成出最终需要的JSON数据 如果[{"id",2,"text":"测试1“}]
return json.dumps(jsonData,ensure_ascii=False) #ensure_ascii=False是为了显示中文否则显示的是unicode码
################ service#######################
def getROOTCompany():
results = []
tmp = dao.getROOTCompany()
for row in tmp:
company = Company() #实例化 Company类
company.id = row[0] #获取集合中的第一个字段
company.text = row[1]
results.append(company)
################工具类#########################
JSONUtil
def object2Json(o):
dic = {}
for e in dir(o): #使用DIR函数线上对象o中的所有属性和方法
if not "__" in e: #过滤包含__的内在属性
dic[e] = getattr(o,e)
return dic # 这样返回的就是对象中以属性为KEY 值为VALUE的 字典 如:{"id",2,"text":"测试1“}
#####################前端##############################
参考EASYUI DEMO TREE的请求默认METHOD是POST 需要改成GET Flask模式是接手GET请求。
################服务器启动#############################
#!/usr/bin/env python
# encoding: utf-8
from flask import Flask
from controller import sample
app = Flask(__name__)
app.register_blueprint(sample) #将路径注册到服务器中,实现访问http://127.0.0.1:5000/allRootCompany 可以访问到controller 里 的allRootCompany方法
if __name__ == "__main__":
app.run()
|
|