• django基础之信号


    Django信号

    很多数情况下,我们需要在操作数据库之前或者之后做某些操作,比如说写个日志之类的,我们当然可以找到每一个sql语句,在其前后加一段代码,

    但是,这不但浪费时间,还为以后的维护增加了难度,这个时候,就体现出信号的作用了。下面的代码是Django中对数据库增加一条数据的操作:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # models.py
     
    from django.db import models
     
    class User(models.Model):
        title = models.CharField(max_length=32)
     
     
    # views.py
     
    from django.shortcuts import render,HttpResponse
    from app01 import models
     
    def func1(request):
        models.User.objects.create(title='付勇')
        return HttpResponse('创建成功')
     
    def func2(request):
        models.User.objects.create(title='小男孩')
        return HttpResponse('创建成功')
     
    def func3(request):
        models.User.objects.create(title='小少年')
        return HttpResponse('创建成功')
     
    def func4(request):
        models.User.objects.create(title='小青年')
        return HttpResponse('创建成功')

     这个时候,如果我们想要在每增加一条数据之后在控制台打印一句话(当然可以换成其他操作)的话,就可以在项目下的__init__.py中进行信号操作,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    from django.db.models import signals
     
    def before_save1(*args,**kwargs):
        print('before_save1--->',args,kwargs)
     
    def before_save2(*args,**kwargs):
        print('before_save2--->',args,kwargs)
     
    def after_save1(*args,**kwargs):
        print('after_save2---->',args,kwargs)
     
    # 在增加数据之前执行before_save1函数
    signals.pre_save.connect(before_save1)
     
    # 在增加数据之前执行before_save2函数
    signals.pre_save.connect(before_save2)
     
    # 在增加数据之后执行after_save1函数
    signals.post_save.connect(after_save1)

    Django中的内置信号:

    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的modal执行其构造方法前,自动触发
        post_init                   # django的modal执行其构造方法后,自动触发
        pre_save                    # django的modal对象保存前,自动触发
        post_save                   # django的modal对象保存后,自动触发
        pre_delete                  # django的modal对象删除前,自动触发
        post_delete                 # django的modal对象删除后,自动触发
        m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
        class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
    Management signals
        pre_migrate                 # 执行migrate命令前,自动触发
        post_migrate                # 执行migrate命令后,自动触发
    Request/response signals
        request_started             # 请求到来前,自动触发
        request_finished            # 请求结束后,自动触发
        got_request_exception       # 请求异常后,自动触发
    Test signals
        setting_changed             # 使用test测试修改配置文件时,自动触发
        template_rendered           # 使用test测试渲染模板时,自动触发
    Database Wrappers
        connection_created          # 创建数据库连接时,自动触发
  • 相关阅读:
    Spring boot 整合 Mybatis + Thymeleaf开发web(一)
    JAVA截取字符串的几种方式
    【转】JAVA异常报错大全
    Linux中允许远程用户登录访问mysql的方法
    Ubuntu系统下将默认的python2.7升级到3.5
    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
    python将数据写入excel代码,python与office交互
    pyqt4桌面软件各种画布组合结构实例
    python之pyqt4的简单窗口布局以及信号和槽(上代码)
    python 005 正则表达式
  • 原文地址:https://www.cnblogs.com/jimmyhe/p/10830820.html
Copyright © 2020-2023  润新知