# objects_to_json: 将 model对象 转化成 json
# json_to_objects: 将 将反序列化的json 转为 model 对象
def json_field(field_data):
"""
将字典的键值转化为对象
:param field_data:
:return:
"""
if isinstance(field_data, str):
return "\"" + field_data + "\""
elif isinstance(field_data, bool):
if field_data == 'False':
return 'false'
else:
return 'true'
elif isinstance(field_data, unicode):
return "\"" + field_data.encode('utf-8') + "\""
elif field_data is None:
return "\"\""
else:
return "\"" + str(field_data) + "\""
def json_encode_dict(dict_data):
"""
将字典转化为json序列
:param dict_data:
:return:
"""
json_data = "{"
for (k, v) in dict_data.items():
json_data = json_data + json_field(k) + ':' + json_field(v) + ', '
json_data = json_data[:-2] + "}"
return json_data
def json_encode_list(list_data):
"""
将列表中的字典元素转化为对象
:param list_data:
:return:
"""
json_res = "["
for item in list_data:
json_res = json_res + json_encode_dict(item) + ", "
return json_res[:-2] + "]"
def objects_to_json(objects, model):
"""
将 model对象 转化成 json
example:
1. objects_to_json(Test.objects.get(test_id=1), EviewsUser)
2. objects_to_json(Test.objects.all(), EviewsUser)
:param objects: 已经调用all 或者 get 方法的对象
:param model: objects的 数据库模型类
:return:
"""
from collections import Iterable
concrete_model = model._meta.concrete_model
list_data = []
# 处理不可迭代的 get 方法
if not isinstance(object, Iterable):
objects = [objects, ]
for obj in objects:
dict_data = {}
print concrete_model._meta.local_fields
for field in concrete_model._meta.local_fields:
if field.name == 'user_id':
continue
value = field.value_from_object(obj)
dict_data[field.name] = value
list_data.append(dict_data)
data = json_encode_list(list_data)
return data
def json_to_objects(json_str, model):
"""
将 将反序列化的json 转为 model 对象
example:
Test model 预先定义
test_str = '[{"test_id":"0", "test_text":"hello json_to_objects"}]'
json_to_objects(json_str, model)
:param json_str:
:param model: objects的 数据库模型类
:return:
"""
import ast
json_list = ast.literal_eval(json_str)
obj_list = []
field_key_list = [field.name for field in model._meta.concrete_model._meta.local_fields]
for item in json_list:
obj = model()
for field in item:
if field not in field_key_list:
raise ValueError('数据库无 ' + field + ' 字段')
setattr(obj, field, item[field])
obj_list.append(obj)
return obj_list
黑洞http:是企业级http服务提供商,大数据采集服务服务提供商,我们拥有高品质爬虫代理,遍布全国200+城市服务器,从容应对海量IP需求,我们从不吝惜产品质量,为确保您获得最佳体验,我们选择与国内最值得信赖的运营服务商进行深度合作,提供更快,更可靠的服务。
相关资讯
相关文章内容简介
1 IP代理:python学习-- Django进阶之路 model的 objects对象 转 json
# objects_to_json: 将 model对象 转化成 json# json_to_objects: 将 将反序列化的json 转为 model 对象def json_field(field_data):"""将字典的键值转化为对象:param field_data::return:"""if isinstance(field_data, str):return "\"" + field_data + "\""elif isinstance(field_data, bool):if field_data == 'False':return 'false'else:return 'true'elif isinstan [阅读全文]
推荐阅读
20
2019-09
爬虫代理ip横空出世的原因
说到爬虫代理ip资源出现的原因,我们就要从3个方面来分析了。
19
2019-11
代理IP如何伪装IP地址?
关于防火墙基础配置可参考博文:保证Linux系统安全之CentOS 7 firewalld防火墙入门详解
21
2019-05
用代理IP应对爬虫被源网站流量监控封杀IP
爬虫经常需要配合代理IP,但并不是所有网站都会监控流量来源,一些运行良好的网站需要考虑数据安全性和核心竞争力,才会对流量进行监控,防止爬虫的高频率抓取导致核心数据外泄。
28
2019-10
代理IP怎么通过更换ip批量注册账号?
很多时候,我们在做问答营销或者论坛发帖时都遇到过这种情况,比如在一些网站上面批量注册帐号、发布留言评论,或在使用一些即时通讯软件频繁发送消息等等这些行为都会遇到系统的IP限
12
2019-02
什么是HTTP代理?什么是Socks5代理?二者有什么区别?
代理服务器有许多种,我们经常使用的是HTTP代理,比如浏览器使用的就是HTTP代理,像QQ/微信这些可以使用HTTP代理也能使用Socks5代理,这两种代理有什么区别呢?
02
2019-06
免费服务器代理存在的意义是什么?
免费的东西向来令人趋之若鹜,哪怕这东西没有多大价值甚至毫无价值,“免费”两字本身就散发着令人着迷的魅力。今天要说的是免费服务器代理,它有效率低,速度慢,极不稳定,但它的用
热门文章
注意: 严禁一切违规违法的业务,一经发现直接封帐号
Powered by wanchen tech. © | 粤ICP备18047396号-6 广州万宸软件科技有限公司http代理 版权所有