免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Django信號(hào)

Django信號(hào)

Django中提供了“信號(hào)調(diào)度”,用于在框架執(zhí)行操作時(shí)解耦。通俗來講,就是一些動(dòng)作發(fā)生的時(shí)候,信號(hào)允許特定的發(fā)送者去提醒一些接受者。

1、Django內(nèi)置信號(hào)

?
123456789101112131415161718192021Model signals????pre_init??????????????????? # django的model執(zhí)行其構(gòu)造方法前,自動(dòng)觸發(fā)????post_init?????????????????? # django的model執(zhí)行其構(gòu)造方法后,自動(dòng)觸發(fā)????pre_save??????????????????? # django的model對(duì)象保存前,自動(dòng)觸發(fā)????post_save?????????????????? # django的model對(duì)象保存后,自動(dòng)觸發(fā)????pre_delete????????????????? # django的model對(duì)象刪除前,自動(dòng)觸發(fā)????post_delete???????????????? # django的model對(duì)象刪除后,自動(dòng)觸發(fā)????m2m_changed???????????????? # django的model中使用m2m字段操作第三張表(add,remove,clear)前后,自動(dòng)觸發(fā)????class_prepared????????????? # 程序啟動(dòng)時(shí),檢測(cè)已注冊(cè)的app中modal類,對(duì)于每一個(gè)類,自動(dòng)觸發(fā)Management signals????pre_migrate???????????????? # 執(zhí)行migrate命令前,自動(dòng)觸發(fā)????post_migrate??????????????? # 執(zhí)行migrate命令后,自動(dòng)觸發(fā)Request/response signals????request_started???????????? # 請(qǐng)求到來前,自動(dòng)觸發(fā)????request_finished??????????? # 請(qǐng)求結(jié)束后,自動(dòng)觸發(fā)????got_request_exception?????? # 請(qǐng)求異常后,自動(dòng)觸發(fā)Test signals????setting_changed???????????? # 使用test測(cè)試修改配置文件時(shí),自動(dòng)觸發(fā)????template_rendered?????????? # 使用test測(cè)試渲染模板時(shí),自動(dòng)觸發(fā)Database Wrappers????connection_created????????? # 創(chuàng)建數(shù)據(jù)庫連接時(shí),自動(dòng)觸發(fā)

對(duì)于Django內(nèi)置的信號(hào),僅需注冊(cè)指定信號(hào),當(dāng)程序執(zhí)行相應(yīng)操作時(shí),自動(dòng)觸發(fā)注冊(cè)函數(shù):

注冊(cè)信號(hào),寫入與project同名的文件夾下的_init_.py文件中,也是換數(shù)據(jù)庫引擎的地方。

    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("xxoo_callback")        print(sender,kwargs)    xxoo.connect(callback)    # xxoo指上述導(dǎo)入的內(nèi)容
View Code
def my_callback(sender, **kwargs):    print("Request finished!")# 方法一:from django.core.signals import request_finishedrequest_finished.connect(my_callback)# 方法二:from django.core.signals import request_finishedfrom django.dispatch import receiver@receiver(request_finished)def my_callback(sender, **kwargs):    print("Request finished!")
示例
from django.db.models.signals import pre_savefrom django.dispatch import receiverfrom myapp.models import MyModel@receiver(pre_save, sender=MyModel)def my_handler(sender, **kwargs):    ...
指定發(fā)送者

2、自定義信號(hào)

a. 定義信號(hào)

在某py文件中定義信號(hào)。

?
12import django.dispatchpizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

b. 注冊(cè)信號(hào)

在_init_.py 中注冊(cè)信號(hào)

?
12345def callback(sender, **kwargs):????print("callback")????print(sender,kwargs)?pizza_done.connect(callback)

c. 觸發(fā)信號(hào)

?
123from 路徑 import pizza_done?pizza_done.send(sender='seven',toppings=123, size=456)

由于內(nèi)置信號(hào)的觸發(fā)者已經(jīng)集成到Django中,所以其會(huì)自動(dòng)調(diào)用,而對(duì)于自定義信號(hào)則需要開發(fā)者在任意位置觸發(fā)。

更多:猛擊這里

序列化

關(guān)于Django中的序列化主要應(yīng)用在將數(shù)據(jù)庫中檢索的數(shù)據(jù)返回給客戶端用戶,特別的Ajax請(qǐng)求一般返回的為Json格式。

1、serializers

?
12345from django.core import serializers?ret = models.BookType.objects.all()?data = serializers.serialize("json", ret)

2、json.dumps

?
12345678import json?#ret = models.BookType.objects.all().values('caption')ret = models.BookType.objects.all().values_list('caption')?ret=list(ret)?result = json.dumps(ret)

由于json.dumps時(shí)無法處理datetime日期,所以可以通過自定義處理器來做擴(kuò)展,如:

View Code?
1234567891011121314151617import json? from datetime import date? from datetime import datetime? ???class JsonCustomEncoder(json.JSONEncoder):? ????????def default(self, field):? ?????????????if isinstance(field, datetime):? ????????????return o.strftime('%Y-%m-%d %H:%M:%S')? ????????elif isinstance(field, date):? ????????????return o.strftime('%Y-%m-%d')? ????????else:? ????????????return json.JSONEncoder.default(self, field)? ??????# ds = json.dumps(d, cls=JsonCustomEncoder)?
來源:https://www.icode9.com/content-4-493801.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
為你的Django視圖使用裝飾器 |只允許創(chuàng)建模型的用戶刪除它
Django pyecharts 完成前后端分離Demo
python測(cè)試開發(fā)django-161.Celery 定時(shí)任務(wù)保存到數(shù)據(jù)庫 (djcelery)
Django model,QuerySet 序列化成json的方法
drf——django的緩存和信號(hào)
NameError name 'F' is not defined
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服