如何在Django中建立和使用訊號?
Django是一個Python web框架,開發者使用它可以更快地開發web應用程式並編寫簡潔易懂的程式碼。此外,Django是一個功能豐富的應用程式,它包含許多特性,包括Django訊號。
在Django中,訊號用於在發生任何事件時觸發某些函式。例如,當用戶對資料庫進行一些更改時,我們可以觸發一個特定的函式,該函式可以在網頁上向用戶顯示這些更改。
Django包含三種類型的訊號,我們在下面解釋。
pre_save/post_save − 每當使用者儲存資料庫中的任何物件時,它都會觸發操作。
pre_delete/post_delete − 每當使用者想要從資料庫中刪除物件時,它都會自動觸發。
pre_init/post_init − 每當在資料庫中建立新模型時,它都會被觸發。
在本教程中,我們將學習如何在Django中使用訊號。在這裡,我們將從頭開始建立一個應用程式並新增程式碼來建立訊號。
使用者應按照以下步驟在Django應用程式中建立訊號。
步驟1 − 首先,如果尚未安裝,請在終端中執行以下命令在本地計算機上安裝Django。
pip install Django
步驟2 − 現在,在終端中執行以下命令以建立新的Django專案。
django-admin startproject django_demo
步驟3 − 之後,在終端中執行以下命令以更改終端中的目錄並建立一個名為“firstApp”的新應用程式。
cd django_demo python manage.py startapp firstApp
步驟4 − 接下來,我們需要在“firstApp”資料夾內建立一個urls.py檔案,並在檔案中新增以下程式碼。
from django.urls import path
from . import views
urlpatterns = [
path('', views.create_user)
]
步驟5 − 我們還需要設定django專案的urls.py檔案。開啟位於django_demo資料夾內的urls.py檔案,並將以下程式碼新增到檔案中。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# here, firstApp is a app name
path('', include("firstApp.urls")),
]
在上面的程式碼中,我們包含了“firstApp”的URL。
步驟6 − 現在,我們需要將“firstApp”新增到django_demo資料夾的settings.py檔案中。開啟settings.py檔案,並將當前程式碼替換為以下程式碼。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'firstApp', ]
在上面的程式碼中,我們已將“firstApp”新增到INSTALLED_APPS陣列中。
步驟7 − 現在,我們將建立一個模型以將使用者資料儲存到資料庫中。開啟“firstApp”目錄內的models.py檔案,並將以下程式碼新增到其中。
from django.db import models
class User(models.Model):
# Adding the name
name = models.CharField(max_length=100)
# Adding the email
email = models.EmailField()
def __str__(self):
return self.name
在上面的程式碼中,我們建立了包含姓名和電子郵件欄位的“User”模型。
之後,在終端中逐一執行以下兩個命令以遷移資料庫。
python manage.py makemigrations python manage.py migrate
步驟8 − 現在,在“firstApp”目錄中建立一個“signals.py”檔案,並新增以下程式碼以建立訊號。
from django.db.models.signals import post_save
from django.dispatch import receiver
from firstApp.models import User
@receiver(post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
if created:
print('A new user was created:', instance.name, instance.email)
在上面的程式碼中,我們使用了帶有“User”模型的“post_save”訊號。因此,每當在資料庫中儲存新使用者時,它都會呼叫user_created()函式。成功建立使用者後,它會在控制檯中列印使用者的姓名和電子郵件。
步驟9 − 我們還需要在app.py檔案中註冊訊號。開啟app.py檔案,並將以下程式碼新增到檔案中。
from django.apps import AppConfig
class FirstappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'firstApp'
def ready(self):
import firstApp.signals
步驟10 − 接下來,讓我們建立一個表單來獲取使用者輸入。在“firstApp”目錄中建立一個forms.py檔案,並在檔案中新增以下程式碼。
from django import forms
from firstApp.models import User
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('name', 'email')
在上面的程式碼中,我們匯入了User模型並建立了UserForm類。
步驟11 − 接下來,讓我們在views.py檔案中建立一個create_user檢視來處理表單提交。開啟views.py檔案,並在檔案中新增以下程式碼。
from django.shortcuts import render
from firstApp.forms import UserForm
def create_user(request):
# If the form is submitted, save the user. Otherwise, just create an empty form.
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
form.save()
else:
form = UserForm()
# send the base.html file on the response.
return render(request, 'base.html', {'form': form})
在上面的程式碼中,我們檢查方法是否為POST,如果所有表單引數有效則儲存表單。否則,我們將表單顯示給使用者而不儲存表單資料。此外,我們向用戶呈現“base.html”模板。
步驟12 − 現在,我們需要建立“base.html”模板。在此之前,在“firstApp”資料夾中建立一個“templates”目錄。之後,開啟“settings.py”檔案,並將以下程式碼替換為舊程式碼。
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
在上面的程式碼中,我們已將“templates”目錄的路徑新增為“DIRS”屬性的值。
步驟13 − 接下來,在“templates”目錄內建立一個base.html檔案,並在檔案中新增以下程式碼。
<!DOCTYPE html>
<html>
<head>
<title> Basic form </title>
</head>
<body>
<h1>Create a new user</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create">
</form>
</body>
</html>
上面的程式碼將在網頁上顯示錶單。
步驟14 − 作為最後一步,您需要透過在包含manage.py檔案的專案目錄中執行以下命令來執行專案。
python manage.py runserver
輸出
當用戶開啟localhost時,將看到以下網頁。

在表單中輸入您的姓名和電子郵件並按下建立按鈕後,它將呼叫views.py檔案的create_user()函式,並將資料儲存到資料庫中。將資料儲存到資料庫後,訊號將呼叫user_created()函式,該函式在控制檯中列印姓名和電子郵件,如下所示。

結論
我們學習瞭如何使用訊號在發生任何事件時觸發特定操作。在即時開發中,我們可以使用訊號來呼叫傳送確認電子郵件給使用者的函式,每當建立新使用者時。此外,django訊號還有許多其他用例。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP