分享

FLASK + EASYUI 之 JSON

rookiecc 发表于 2015-5-25 17:34:31 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 47009
      近期在做后台管理系统,同时也想让自己更加了解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()
     

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条