近刚优化完Django后台界面JSON格式数据的展示,让我感受到一点小小成就感。优化过程中,我特别想写一篇技术博客,说一说整个实现流程;待功能做完,又感觉似乎能说的内容极少——这个优化,是很简单的。(我常有类似感受,一个东西花了很长时间才处理掉,处理完毕之后会觉得如此简单并开始质疑自己如何花了许多时间?)
// 有中文的JSON
{"insun": "\u6cf0\u56e7 / \u4eba\u5728\u56e7\u90142 / Lost in Thailand "}
JSON数据,包含中文之后看起来乱乱的,会影响我工作效率。我想明白它的具体内容,需要将它的内容复制到一个工具网站上进行查看。我要将这复制粘贴再点一下的过程去掉,我要我所见到的是我能看懂的!
谷歌了一下,似乎做这个优化的程序员并不多,只有一个叫做Django-JSONEditor的自定义控件可用。
按照作者的步骤能够很方便的将问题解决。我因为上面的一个广告按钮而拒绝使用,我以为这广告是Django-JSONEditor加上的,于是自己模仿它的实现做一个自定义控件将其搬到Django中。搬的过程遇见静态资源加载不出来的情况,又一通谷歌,弯弯绕绕的在Django层处理。
待这一步做完,发现广告按钮依然在,才发现是藏在JSON Editor中的物件,将JS文件中的对应代码干掉,便没有广告了。于是知道前端的内容,发布到互联网是会压缩打包的。
本机环境OK后,部署到测试机上,发现静态资源依然不在,这让我接触到Nginx。理解Nginx的(极小部分)使用方式,将它搞定,至此优化结束。
GitHub上的效果图
怎么说呢?转行之后,除了主要使用语言(Python)与敲代码的风格(可能可以说是设计模式吧)不变,我是接触到许多新技术的。
苹果电脑与Git,是已经可以熟练使用的基础工具。
HTTP协议,感觉已经快有一个大概框架印在心中。以看书的方式了解全局框架之后会是TCP与IP的学习。
Docker(容器),认识到它是什么并能进行基础运用。在容器的上层,据说还有管理容器的集群(K8S)。
Nginx,是刚接触的。现阶段可以看懂它的基础配置,能够稍微改改,但自己写就还差点意思。
HTML与JS,似乎已经藏在几个很复杂的框架后面,要想看到它们,必须先熟悉框架。
许多的我没了解到的内容在等待我去发现。
半年以来,一直在不停地拓展知识广度,我的Python深度之旅,断断续续。谨以此篇说明,我的内功修炼之路,是在前行的。
未来还长,未完待续。
引用链接:
JSON Editor的GitHub地址:https://github.com/json-editor/json-editor
Django-JSONEditor,有人封装的Django版本,按照上面的指引,可以很快用起来:https://github.com/nnseva/django-jsoneditor
在线JSON转义工具:https://c.runoob.com/front-end/53/
用一年时间如何能掌握 C++ ?:https://www.zhihu.com/question/23933514/answer/26290066
本文件的批量性操作,Excel催化剂已经有非常多的功能,常听说许多人对Excel催化剂的印象是功能太杂,但试问,不是活在真空世界中做数据分析,面对一大堆杂乱的数据环境,没有足够“杂”的功能来应付,真的可以称得上数据神器么?
本篇的两个小功能,处理下一般数据采集获取到的非理想文本数据:带unicode字符串的文本和带html特殊符号的文本。这些功能也是从实际需求中来。为了让数据处理更加得心应手,功能仍然不断新增。
这里说的网页采集,当然可以最原始的从网页上复制粘贴回来的数据,更自动化的,就是使用网页采集工具批量性获取到的数据。
网页html文本,有转义字符如: <(小于号<) 、 >(大于号>) 、 (空格)等,这些因为html上有特定的含义,需要转义成其他输入字符。
更多的可见下文截图:
最终我们还原后,应该得到下面的文本才是想要的。
我们采集到的数据中,可能会是以下展示的样式,非英文、数字的比如中文,用了Unicode字符表示(\u开头的)。
我们需要这样的格式,才是人阅读和使用的文本。
既然这么大的共性情况,肯定是将它落实到功能上固化,有再次出现时可以立马解决,这就是Excel催化剂越来越“杂”的由来。
处理一个文件,你说在线转换下就可以,处理100个、1000个呢,还会这样去做吗?在Excel催化剂里,必然是批量性操作最佳使用场合。
如果数据已经落到Excel的单元格里,在做网页采集功能时,其实已经将此成套的网页采集相关会用到的功能都做成了自定义函数。
如下的将html的转义字符解码
同样地,Unicode字符串还原为原字符,也有自定义函数。
除此以外,还有大量的转换Utf8、从json提取、从xml提取指定元素、Url转码和还原等一大堆自定义函数。
上述自定义函数使用场景,数据源在Excel单元格或提取结果存储在Excel单元格,另如果是对整个文件的转换,就是本篇开发的两个小功能。
使用非常简单,选择一个或多个待转换的文本文件路径单元格,当只选择待转换时,转换后的结果覆盖原文件,选择两列时,右侧列为转换结果生成新文本,建议采用新生成文件方式。
任何覆盖原始文件的操作均有数据风险,无法恢复数据初始状态,不是一个好的科学的数据管理方式。
小功能有大智慧,你能感受到了吗?盼望Excel催化剂的使用者,会因为其功能的不断新增而惊喜,因为又有新的繁琐操作被简单固化了。
看到小小的Excel催化剂包含这么多的功能,来应对各种数据采集、处理、分析各环节的痛点,希望催化剂的使用者们,都有慧眼,不用再相信培训机构所吹嘘的培训一小时,从此不加班的收割式的忽悠大法。
应对功能越来越多,请始终坚守最佳的Excel催化剂使用方法:搜索+笔记,用到时即搜即得,日常追更下文章。写文章者1小时,读文章者2分钟即可。
路是方向,代码是时间,知识需积累,经验需摸索。希望对大家有用,有错误还望指出。
HttpResponse 的其他使用方法和注意事项。
除了返回字符串和二进制数据以外,HttpResponse 还可以返回 JSON 格式的数据。这通常用于构建 Web API,让客户端能够方便地获取数据并进行处理。
下面是一个返回 JSON 数据的例子:
import json
from django.http import HttpResponse
def my_api(request):
data={'foo': 'bar', 'baz': [1, 2, 3]}
json_data=json.dumps(data)
response=HttpResponse(json_data, content_type='application/json')
return response
在这个例子中,我们首先使用 Python 自带的 json 模块将一个字典转换成 JSON 格式的字符串,然后将其作为响应内容传递给 HttpResponse 对象。最后,我们设置 content_type 参数为 application/json,表示该响应是一个 JSON 格式的数据。
除了 HttpResponse 以外,Django 还提供了其他一些响应类来方便我们进行重定向、错误处理等操作。其中,HttpRedirect 是用于重定向的响应类之一。
例如,如果我们希望将用户重定向到另一个 URL 上,可以这样写:
from django.http import HttpResponseRedirect
def my_view(request):
return HttpResponseRedirect('/another-url/')
在这个例子中,我们创建了一个 HttpResponseRedirect 对象,并将其目标 URL 设置为 /another-url/。当客户端收到该响应时,它会自动跳转到该 URL,并展示相应的内容。
除了直接返回整个响应内容以外,Django 还提供了 StreamingHttpResponse 类,可以用于按需生成、传输响应内容。这对于处理大量数据或需要逐步生成响应内容的场景非常有用。
例如,如果我们希望生成一个包含随机数的 CSV 文件并将其作为响应传递给客户端,可以这样写:
import csv
import random
from django.http import StreamingHttpResponse
def generate_csv():
yield 'id,value\n'
for i in range(100000):
value=random.randint(1, 1000)
yield f'{i},{value}\n'
def my_view(request):
response=StreamingHttpResponse(generate_csv(), content_type='text/csv')
response['Content-Disposition']='attachment; filename="data.csv"'
return response
在这个例子中,我们定义了一个名为 generate_csv 的生成器函数,它会按照 CSV 格式生成一系列随机数,并逐行生成响应内容。然后,我们使用 StreamingHttpResponse 类创建一个流式响应对象,并将生成器函数作为参数传递给该对象。最后,我们设置 content_type 参数为 text/csv,表示该响应是一个 CSV 格式的文件,并使用 Content-Disposition 头信息告诉客户端该响应应该被下载保存。
最后,需要特别注意的是,在编写 HttpResponse 代码时,我们需要注意防止跨站脚本攻击(XSS)。XSS 攻击是指攻击者通过在网页中注入恶意脚本来攻击用户浏览器的一种漏洞。
为了防止 XSS 攻击,我们应该始终对响应内容进行转义,并使用相应的安全函数来处理输入数据。例如,在 Django 中,可以使用 escapejs 和 escapeHTML 函数来分别对 JavaScript 和 HTML 进行转义。
from django.http import HttpResponse
from django.utils.html import escape
def my_view(request):
data=request.GET.get('data')
escaped_data=escape(data)
response=HttpResponse(f'You entered: {escaped_data}')
return response
在这个例子中,我们通过 request.GET.get 方法获取了一个名为 data 的 GET 参数,并使用 escape 函数对其进行了 HTML 转义。然后,我们将转义后的数据作为响应内容返回给客户端。这样就可以避免恶意脚本被注入到响应内容中,从而保护用户的安全。
另外,Django 还提供了一些安全函数来帮助我们防止 XSS 攻击。以下是一些常用的安全函数:
例如,在 Django 模板中,我们可以使用如下方式对变量进行转义:
<p>{{ my_variable|escape }}</p>
在这个例子中,我们使用了模板语法中的过滤器,将 my_variable 变量的值进行了 HTML 转义。这样即使该变量包含恶意脚本,也不会对用户造成威胁。
总之,XSS 攻击是一种非常严重的漏洞,我们应该时刻注意防范,并采取相应的措施来保护用户的安全。
*请认真填写需求信息,我们会在24小时内与您取得联系。