• Django之信号


    信号

        框架帮助开发者预留的可扩展的位置

        如果要对某张表操作增删啊之前之后都要记录可以使用信号,当然也可以使用触发器

    使用:

    在项目init文件下:

     1 from django.db.models import signals
     2 
     3 
     4 def before_save(*args, **kwargs):
     5     print(args, kwargs)
     6 
     7 
     8 def after_save(*args, **kwargs):
     9     print(args, kwargs)
    10 
    11 
    12 signals.pre_save.connect(before_save)
    13 signals.post_save.connect(after_save)

    url.py

    from django.contrib import admin
    from django.urls import path
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index),
        path('login/', views.login),
    ]

    models.py

    1 from django.db import models
    2 
    3 
    4 class UserType(models.Model):
    5     title = models.CharField(max_length=32)

    views.py

     1 from django.shortcuts import render, HttpResponse
     2 from app01 import models
     3 
     4 
     5 def index(request):
     6     # models.UserType.objects.create(title='普通杂碎')
     7     return HttpResponse('ok')
     8 
     9 
    10 def login(request):
    11     models.UserType.objects.create(title='挑逗杂碎')
    12     return HttpResponse('ok')

     Django内置信号

     1 Model signals
     2     pre_init                    # django的modal执行其构造方法前,自动触发
     3     post_init                   # django的modal执行其构造方法后,自动触发
     4     pre_save                    # django的modal对象保存前,自动触发
     5     post_save                   # django的modal对象保存后,自动触发
     6     pre_delete                  # django的modal对象删除前,自动触发
     7     post_delete                 # django的modal对象删除后,自动触发
     8     m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
     9     class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
    10 Management signals
    11     pre_migrate                 # 执行migrate命令前,自动触发
    12     post_migrate                # 执行migrate命令后,自动触发
    13 Request/response signals
    14     request_started             # 请求到来前,自动触发
    15     request_finished            # 请求结束后,自动触发
    16     got_request_exception       # 请求异常后,自动触发
    17 Test signals
    18     setting_changed             # 使用test测试修改配置文件时,自动触发
    19     template_rendered           # 使用test测试渲染模板时,自动触发
    20 Database Wrappers
    21     connection_created          # 创建数据库连接时,自动触发

    自定义信号:

    定义信号:

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

    注册信号:

    1 pizza_done.connect(函数名)

    触发:

    1 pizza_done.send()

    更多:https://docs.djangoproject.com/en/dev/topics/signals/

  • 相关阅读:
    如何写一个简单的解释器
    linux下ifconfig, DNS以及route配置
    再次看编码
    Linux kernel API的查看
    学习Haskell的一些资料
    Unix,windows和Mac中的换行
    Cmake中的find_package功能
    知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
    RANSAC和Flitline
    花40分钟写一个-CBIR引擎-代码公开
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11323287.html
Copyright © 2020-2023  润新知