django 訊號
django存在一個’訊號排程程式’, 可以實現當某事件在框架內發生時,通知到我們的應用程式。比如當某個時間(event)發生時允許若干寄件人(sender)通知一組接受者(receivers)
Django includes a “signal dispatcher” which helps allow decoupled applications get notified when actions occur elsewhere in the framework. In a nutshell, signals allow certain senders to notify a set of receivers that some action has taken place. They’re especially useful when many pieces of code may be interested in the same events.
具體比如, 當某個使用者被建立後, 會通知某個程式, 建立一個token, 類似於mysql觸發器.
Model signals可以分為一下幾種:
pre_init 某個例項馬上要初始化了
post_init 某個例項已經初始化了
pre_save 個例項即將要儲存入庫了
post_save 某個例項即已經儲存入庫了
pre_delete 某個例項即將要刪除了
post_delete 某個例項即已經刪除了
class_prepared 某個class準備好了
m2m_changed 模型的ManyToManyField改變時觸發
使用:
場景1: 建立使用者後加密密碼(因某種原因存入資料庫的是明文)
- 在apps/user下新建
signals.py
from django.contrib.auth import get_user_model
from django.db.models.signals import post_save
from django.dispatch import receiver
User = get_user_model()
@receiver(post_save, sender=User)
def create_user(sender, instance=None, created=False, **kwargs):
if created:
password = instance.password
instance.set_password(password)
instance.save()
signal接受函式需要確保將此程式碼段放置在已安裝的models.py模組或Django在啟動時匯入的其他位置
- 載入signals設定: apps/users/init.py中填寫:
default_app_config = 'users.apps.UsersConfig'
- 隨後在apps/user/app.py的config類下重寫ready方法:
from django.apps import AppConfig
class UsersConfig(AppConfig):
pass
def ready(self):
import users.signals
場景2: 生成token
如果你希望每個使用者擁有自動生成的令牌,你可以簡單地捕獲使用者的post_save訊號。
原文: jango-REST-framework-documentation
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
參考:
相關文章
- django的訊號量Django
- Django | 訊號使用思考Django
- Django中的內建訊號有哪些Django
- Django訊號與擴充套件:深入理解與實踐Django套件
- Django(5)django配置資訊Django
- 深入理解Django:中介軟體與訊號處理的藝術Django
- 3分鐘看懂Python後端必須知道的Django的訊號機制!Python後端Django
- 03 . Django之騰訊雲簡訊Django
- 訊號
- Django2.1視訊教程Django
- Bold訊號與fNIRS訊號的區別
- 程序通訊--訊號
- 程序通訊-訊號
- 音訊訊號表徵音訊
- 程序訊號
- Django 報錯資訊總結Django
- 微信公眾號開發Django JSSDK授權DjangoJS
- python Django框架符號衝突怎麼處理?PythonDjango框架符號
- 程式間通訊——POSIX 有名訊號量與無名訊號量
- bash訊號捕捉
- POSIX 訊號量
- STM32的UCOS訊號量和互斥訊號量
- 音訊訊號處理入門音訊
- Django整合騰訊COS物件儲存Django物件
- Django搭建個人部落格:用django-notifications實現訊息通知Django
- 訊號課組(一) 訊號與系統 Part 0 MATLAB在訊號與系統中的使用Matlab
- 微信公眾號開發Django 網頁授權Django網頁
- 程序間的通訊(訊號通訊)
- 視訊號如何漲粉,視訊號漲粉運營技巧
- 訊號處理第二篇——接著談正弦訊號
- 程序間通訊(4)-訊號量
- python中的訊號通訊 blinkerPython
- 訊號與系統
- linux 訊號機制Linux
- python 之訊號SignalPython
- Python訊號之分享Python
- liteos訊號量(八)
- LVDS訊號詳解