日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Django信號(hào)

 印度阿三17 2019-10-08

Django信號(hào)

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

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Model 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)求到來(lái)前,自動(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ù)庫(kù)連接時(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),寫(xiě)入與project同名的文件夾下的_init_.py文件中,也是換數(shù)據(jù)庫(kù)引擎的地方。

    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_finished

request_finished.connect(my_callback)

# 方法二:
from django.core.signals import request_finished
from django.dispatch import receiver

@receiver(request_finished)
def my_callback(sender, **kwargs):
    print("Request finished!")
示例
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel


@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
    ...
指定發(fā)送者

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

a. 定義信號(hào)

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

?
1 2 import django.dispatch pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

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

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

?
1 2 3 4 5 def callback(sender, **kwargs): ????print("callback") ????print(sender,kwargs) ? pizza_done.connect(callback)

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

?
1 2 3 from 路徑 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)則需要開(kāi)發(fā)者在任意位置觸發(fā)。

更多:猛擊這里

序列化

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

1、serializers

?
1 2 3 4 5 from django.core import serializers ? ret = models.BookType.objects.all() ? data = serializers.serialize("json", ret)

2、json.dumps

?
1 2 3 4 5 6 7 8 import 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í)無(wú)法處理datetime日期,所以可以通過(guò)自定義處理器來(lái)做擴(kuò)展,如:

View Code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import 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)?
來(lái)源:https://www./content-4-493801.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多