Ich begann darüber nachzudenken, ob der angemeldete Benutzer durch gemeinsame Verarbeitung im Modell user_created (Ersteller) und user_updated (Updater) gespeichert werden könnte.
Bis dahin habe ich den Prozess des Übergebens von Benutzerinformationen von der Ansicht an das Formular und des Speicherns in user_created und user_updated geschrieben.
Middleware ist ein Framework zum Hinzufügen von Hooks zur Anforderungs- / Antwortverarbeitung von Django.
Sie können die Verarbeitung definieren, die beim Senden einer Anfrage oder vor dem Zurücksenden einer Antwort ausgeführt werden soll.
common/middlewares/threadlocals.py
from threading import local
THREAD_LOCAL = local()
def set_thread_variable(key, value):
"""Speichern Sie den Wert in den lokalen Thread-Daten
"""
setattr(THREAD_LOCAL, key, value)
def get_thread_variable(key, default=None):
"""Wert aus lokalen Thread-Daten abrufen
"""
return getattr(THREAD_LOCAL, key, default)
def get_request():
"""Abfrageinformationen aus lokalen Thread-Daten abrufen
"""
return get_thread_variable('request')
common/middlewares/request_store_middleware.py
from common.middlewares.threadlocals import set_thread_variable
from django.utils.deprecation import MiddlewareMixin
class RequestStoreMiddleware(MiddlewareMixin):
def process_request(self, reuqest):
set_thread_variable('request', reuqest)
Dieses Mal möchte ich die Anforderungsinformationen, daher definiere ich nur "process_request".
settings.py
.
..
...
MIDDLEWARE = [
.
..
...
'common.middlewares.request_store_middleware.RequestStoreMiddleware', #hinzufügen
]
...
..
.
Ich habe mich für die Verwendung in models.py entschieden, da der Zweck darin besteht, Benutzerinformationen beim Speichern in der Datenbank zu speichern.
common/models.py
.
..
...
from common.middlewares.threadlocals import get_request
from django.db.models.signals import pre_save
...
..
.
class Company(BaseModel):
"""Unternehmensmodellklasse
"""
...
..
.
created_user = models.ForeignKey(User, on_delete=models.DO_NOTHING, null=True, blank=True)
updated_user = models.ForeignKey(User, on_delete=models.DO_NOTHING, null=True, blank=True)
...
..
.
def set_user_receiver(sender, instance, *args, **kwargs)
request = get_request() #Die Authentifizierungsprüfung kann vor dem Speichern von Benutzerinformationen durchgeführt werden
instance.created_user = request.user
instance.updated_user = request.user
pre_save.connect(set_user_receiver, sender=Company) # pre_Wenn Sie Speichern verwenden, speichern Sie()Sie können die Funktion, die Sie aufrufen möchten, vor der Ausführung registrieren.
Ende
Recommended Posts