django 自定义信号 1.11

django 还支持自定义信号

需要步骤

1. 创建信号

import django.dispatch

# 信号名
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

这个信号名相当于 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

后面  ["toppings", "size"] 是触发者传递的两个参数,触发这个信号传递的参数

2.注册信号

注册函数

def callback(sender, **kwargs):
    print("callback")
    print(sender,kwargs)

pizza_done.connect(callback)

3.触发信号

from 路径 import pizza_done

pizza_done.send(sender=‘seven‘,toppings=123, size=456)

实验开始 在django 项目下  创建一个 pg.py 存放自己创建信号的代码 或者 其他目录下

import django.dispatch

# 信号名
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

def f1(sender, **kwargs):
    print("callback")
    print(sender, kwargs)

pizza_done.connect(f1)

urls.py 新添加 test2 url路由关系

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include
from app01 import views

urlpatterns = [
    # url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘, views.login),
    url(r‘^index/‘, views.index),
    url(r‘^logout/‘, views.logout),
    url(r‘^test/‘, views.test),
    url(r‘^cache/‘, views.cache),
    url(r‘^signal/‘, views.signal),
    url(r‘^test2/‘, views.test2),
]

在viwes.py  test2函数触发信号

导入pg.py 模块

def test2(request):

    from pg import pizza_done
    # 触发信号,要想触发需要加参数 想什么写就什么写
    pizza_done.send(sender="asdasda",toppings=123, size=456)

    print("ok")
    return HttpResponse("自定义信号")

执行url

后台拿到信息

mike
jack
tom
小张
小刚
老张
callback
asdasda {‘signal‘: <django.dispatch.dispatcher.Signal object at 0x00000000045F1C88>, ‘toppings‘: 123, ‘size‘: 456}
ok
xiaogang
xiaoming
peter
[07/Jan/2019 18:06:06] "GET /test2/ HTTP/1.1" 200 15

由于内置信号的触发者已经集成到Django中,所以其会自动调用,而对于自定义信号则需要开发者在任意位置触发。

原文地址:https://www.cnblogs.com/mingerlcm/p/10234770.html

时间: 2024-08-29 21:40:42

django 自定义信号 1.11的相关文章

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

django之创建第11个项目-页面整合

目的:将如下众多html页面整合到一个index.html页面中. 百度云盘:django之创建第11个项目-页面整合 用下面的方式实现: <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>站点主页</title> <!--去掉超链接中的下划线--> <style>a{TEXT-DECORATION:none}</style> <

Django之信号

一.什么是信号 Django 提供一个"信号分发器",允许解耦的应用在框架的其它地方发生操作时会被通知到.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 二.Django内置信号 Model signals:     pre_init                # django的modal执行其构造方法前,自动触发     post_init               # django的modal执行其构造方法后,自动触发     pre_save   

Django的信号机制

Django提供一种信号机制.其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) .当发生一些动作的时候,发出信号,然后监听了这个信号的callback函数就会执行. Django内置信号 Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触发 pre_save # django的modal对象保存前,自动触发 post_save # django的mo

【Django】信号调度

Django中提供了"信号调度",用于在框架执行操作时解耦. 通俗来讲,就是在某些动作发生时,信号允许特定的发送者去提醒一些接受者. * Django内置信号:** Model signals pre_init # django的model执行其构造方法前,自动触发 post_init # django的model执行其构造方法后,自动触发 pre_save # django的model对象保存前,自动触发 post_save # django的model对象保存后,自动触发 pre_

django的信号

django的信号 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django提供一种信号机制.其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) .当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行. 1. Django内置信号 Model signals pre_init # django的model执行其构造方法前,自动触发 post_init # djan

Linux信号使用及自定义信号

linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luotuo44/article/details/16799607 信号处理:https://wiki.jikexueyuan.com/project/cplusplus/signal-handling.html 没什么kill -l没有32 33 http://www.kbase101.com/quest

django 自定义User

django本身的auth_user 只包含了基本的信息包括用户名,密码,邮箱以及注册时间和最新的登录时间,但是这些字段很难满足我们的要求,有时我们想记录用户更多的信息,例如手机号等信息,这时就需要在auth_user 的基础上增加字段,django自定义User网上有四种方法. 1,是官网上推荐的方法,就是增加一个表auth_profile,其中以auth_user 表中的id作为Forgein Key将两个表过关联起来,这样可以在auth_profile 中增加多个用户的信息. 2,另外一种

django 自定义user使用权限管理模块

这篇文章主要是讲如何让自定义的user模块也能用到django.contrib.auth中的权限管理模块 看这篇文章之前请先看一下我前边的两篇文章,本文以这两篇文章为基础: django 自定义 USER 用源码告诉你django权限管理是怎么回事 下边是一个大概的实现,后边再做详细分析: 1.user model自定义 class AbstractUser(models.Model): # 登录信息 id = models.AutoField(primary_key=True) staff =