专栏首页JackeyGao的博客Django Admin输出JSON

Django Admin输出JSON

Django Admin输出JSON

Posted March 15, 2017

Django 自带Admin后台这是Django的优势所在, 这样的话我们可以开箱即用后台功能。 有人说Django重, 可能设计就是这样, 过度的封装就是让开发者更简单的实现。 比起flask、tornado等轻量级的框架。 Django更适合做支撑系统的开发。

当然本文不讲述Django和其他轻量级框架的优劣, 主要说一个修改Admin后台的例子。 虽然Admin可以对定义的模型表做一些基本的增删改查, 但是有时候我们需要加一些功能。 比如: 我想在change页面加入一个字段, 可以完整的显示整个实例的所有字段, 并以JSON的格式显示出来。 这样对于我在开发API的时候能更加直观, 而且我想显示的JSON是格式化之后的, 最好是加上语法高亮.

所以我用了以下代码去完成了这个需求:

Python

from django.contrib import admin
import json
import copy
from pygments import highlight
from pygments.lexers import JsonLexer
from pygments.formatters import HtmlFormatter

from django.contrib import admin
from django.utils.safestring import mark_safe

from .models import APIData


class APIDataAdmin(admin.ModelAdmin):
    readonly_fields = ('data_prettified',)

    def data_prettified(self, instance):
        """Function to display pretty version of our data"""
        # Convert the data to sorted, indented JSON
        data = copy.deepcopy(instance.__dict__)
        data.pop('_state')
        response = json.dumps(data, sort_keys=True, indent=2)

        # Truncate the data. Alter as needed
        response = response[:5000]

        # Get the Pygments formatter
        formatter = HtmlFormatter(style='colorful')

        # Highlight the data
        response = highlight(response, JsonLexer(), formatter)

        # Get the stylesheet
        style = "<style>" + formatter.get_style_defs() + "</style><br>"

        # Safe the output
        return mark_safe(style + response)

    data_prettified.short_description = 'data prettified'

admin.site.register(APIData, APIDataAdmin)

完成后的效果图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何做一个实体日历技术方面印刷方面

    本篇唠下做一本实体日历用到了哪些东西, 虽然工作量大部分是技术编码方面, 但剩余联系打印社及了解打印纸张和打印的质量等东西对我来说比编码难多了。 甚至和打印店讨...

    用户1416054
  • Django OAuth2 和 JWT 案例

    在重写 Ansible 监控平台时, 需要前后端分离, 并且需要使用公司的账户系统。 而前后端认证我一直采取的 JWT 认证规范,具体为什么这么选择, 这里不多...

    用户1416054
  • 用Python不务正业 - 第一弹

    从这篇开始会做一个用Python不务正业专题, 记录Python一些一无是用但是很好玩的脚本.本期是一个终端乱弹的脚本.

    用户1416054
  • Metpy新版功能下载TLnP图设置

    用于天气绘图的Metpy包更新(0.8版本)了,他们要逐渐抛弃Python2.X,转到Python>=3.6的版本上。所以,之前(越2018年6月以前,0.7版...

    zhangqibot
  • Angular 2 + 折腾记 :(3)初步了解服务及使用

    不探究高深理论,只探究实际使用,有更好的写法或者经验请指出; 有些暂时没涉及到的知识我可能会顺着例子解释;

    CRPER
  • 封装的数据清洗可视化特征工程类

    AI之禅
  • 【Django】Django RestFramework框架

    详见:http://www.django-rest-framework.org/api-guide/permissions/#api-reference

    魏晓蕾
  • 利用 python+plotly 制作Contour Plots模拟双波源干涉现象

    本人在学习使用 plotly 的contour plots 制作的时候,发现利用这个表格制作波的干涉模拟方面有很不错的效果,因为之前被各种波动方程和振动方程教育...

    FunTester
  • python使用pandas抽样训练数据中某个类别实例

    以上这篇python使用pandas抽样训练数据中某个类别实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • Servlet 通过Filter拦截器解决全站编码问题

    请求 参数 public string import void 编码 问题 utf-8 request matcher

    Alone88

扫码关注云+社区

领取腾讯云代金券