Django之信号和序列化
2017-09-21 17:23
399 查看
前言
Django的信号要从一张抽象图和一个需求说起;
from django.core.signals import request_finished from django.core.signals import request_started from django.core.signals import got_request_exception from django.db.models.signals import class_prepared from django.db.models.signals import pre_init, post_init from django.db.models.signals import pre_save, post_save from django.db.models.signals import pre_delete, post_delete from django.db.models.signals import m2m_changed from django.db.models.signals import pre_migrate, post_migrate from django.test.signals import setting_changed from django.test.signals import template_rendered from django.db.backends.signals import connection_created def callback(sender,**kwargs): print(sender) #操作的那张表 print(kwargs['instance'].name) #获取增加的那样记录的 name pre_save.connect(callback)View Code
二、自定义信号
如果Django自定制的信息无法满足你的需求还可以自定制信号
1.定义注册
# 自定义信号 import django.dispatch pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"]) def callback1(sender,**kwargs): print('这是一个自定义信号') print(sender) #操作的那张表 print(kwargs) #获取增加的那样记录的 pizza_done.connect(callback1)
2、导入执行
def index(request): userlist=models.UserInfo.objects.all() ctime=time.time() from django缓存 import pizza_done a=models.UserInfo.objects.create(name='xxx',pwd='123') pizza_done.send(sender=a.name,pwd=a.pwd) #调用自定义信号必须传sender参数 return render(request,'index.html',locals())
三、序列化
json模块默认能处理的Python数据类型有限,在使用Django做web开发的时候如何 序列化 query_set和时间数据类型呢?
+---------------+-------------------+
| JSON | Python |
+===============+===================+
| object | dict |
+---------------+-------------------+
| array | list |
+---------------+-------------------+
| string | str |
+---------------+-------------------+
| number (int) | int |
+---------------+-------------------+
| number (real) | float |
+---------------+-------------------+
| true | True |
+---------------+-------------------+
| false | False |
+---------------+-------------------+
| null | None |
+---------------+--------------
如何破解?
1、serializers(Django自带的序列化工具)
from
django.core
import
serializers
def index(request): userlist=models.UserInfo.objects.all() # 方案1 userlist_str=serializers.serialize('json',userlist) print(userlist_str) ctime=time.time()[/code]
2、自定制 json.dumps方法中cls参数(serializers内部也是这样实现的)
vale=json.dumps(userlist,cls=json.JSONEncoder)
from datetime import datetime from datetime import date import json #自定义一个类,由于Python的一数据类型,json可以序列化,所有可以继承json.JSONEncoder方法 class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime): return field.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field,date ): return field.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field) data_list=[ {'name':'eric0','age':18,'ctime':datetime.now()}, {'name':'eric1','age':18,'ctime':datetime.now()}, {'name':'eric2','age':18,'ctime':datetime.now()} ] str1=json.dumps(data_list, cls=JsonCustomEncoder) print(str1)
相关文章推荐
- django--缓存,序列化,信号
- Django(信号,缓存,序列化,与性能有关数据库查询)
- Django--缓存、信号、序列化
- django序列化时使用外键的真实值
- Django 之 信号机制
- Django中视图总结[urls匹配,HttpRequest对象,HttpResponse,render,redirect对象,对象序列化接受及案例]
- django 1.8 官方文档翻译:14-5 信号
- Django中的序列化
- Django之中间件、缓存以及信号
- django中的信号
- Django,再谈json序列化
- 深入理解Django自定义信号(signals)
- django 信号
- Django(七)缓存、信号、Form
- Python开发【Django】:缓存、信号
- Django 之 序列化
- django序列化时使用外键的真实值
- Django REST FrameWork中文教程1:序列化
- django rest framework 入门1-序列化 Serialization
- 利用信号如何监控Django模型对象字段值的变化详解