Python 语言 Oracle 数据库基于 SQLAlchemy + Flask + Ajax 的 Json 前后端分离开发博客系统遇到的坑汇总

本人一直是用Java做开发,经历了 JSP 时代,到达了JSON前后端分离开发时代。在上家公司的时候,就是绝对的前后端分离开发。我完全不需要接触前端,只需要跟前端约定好接口,然后专心各自开发各自的。那个才叫做爽啊!!

然而,现在公司要求统一开发语言,都用Python。以前没用过Python,语言上还是有很大区别的,这里不啰嗦。应要求,要做个博客系统练习。在开发过程中才发现,Python的课搜索资源比Java少太多了,碎片性的知识点在度娘或者谷歌上根本找不到或者只有可怜的几条,还解决不了问题(可能是我太新手了,查的问题都太小白)。幸亏遇到这位大佬,刚好所用框架跟我现公司要求一致,也是做博客系统,所以就一步一步跟着做了。链接  http://blog.csdn.net/Jmilk/article/details/53782360

但是他的前端还是用jinja2,。jinja2这个东西我觉得在语法上跟 JSP 很像,个人感觉前后端耦合性太强。所以决定在原基础上分离前后端,摒弃 jinja2,改用 jQuery 和 Ajax。

我觉得  后端的开发直接参考这位大佬的 http://blog.csdn.net/Jmilk/article/details/53782360就行了。而关于前后端的分离,我遇到的第一个坑就是   对象转成 json 串传给前端。

需求情景: SQLAlchemy 从数据库中取出来了很多条数据,这些数据已经被 SQLAlchemy 转成 Python 对象列表。怎样转成 json 串数组传给前端??

在这里我查了很多资料,还没发现有什么现成的框架可以支持这样做,有推荐的欢迎留言,所以我只能这样做:

1、在 models 里写了辅助方法,这个方法的功能是  将对象转成字典,代码如下:

# 辅助函数
def return_post_dict(self):
    return dict(id = self.id,
                title = self.title,
                text = self.text,
                publish_date = self.publish_date.strftime('%Y-%m-%d %H:%M:%S'),
                user_id = self.user_id)
2、在 controller 里面将拿到的 Python 对象列表转成 字典 列表,然后用 jsonify 转成 json 传给前端。代码如下:

#查询全部文章
@blog_blueprint.route('/')
@blog_blueprint.route('/<int:page>')
def home(page = 1):
    '''View function for home page'''
    if 'username' not in session:
        return jsonify({'posts':None})
  
    posts = db.session.query(Post).order_by(
        Post.publish_date.desc()
    ).paginate(page, 3).items

    return jsonify({'posts': list(map(models.return_post_dict, posts))})
这样之后,前端就能接收到完美的 json 字符串了!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值