Da der Benutzerstatus häufig über RDB in Webdiensten verwaltet wird, wird Code in verschiedenen Projekten angezeigt, z. B. beim Erstellen von Datensätzen, wenn diese zum Zeitpunkt der Erfassung nicht erfasst wurden.
Django hat auch eine Standardmethode namens get_or_create, die abruft (SELECT), wenn sich ein Datensatz in der Tabelle befindet, und erstellt (INSERT), wenn dies nicht der Fall ist.
Wenn Sie beispielsweise die Punktebilanz für jeden Benutzer auf der Gewinnspielwebsite anzeigen möchten, beträgt der Standardwert 0 Punkte, wenn kein Benutzerdatensatz vorhanden ist.
Wenn nicht, müssen Sie zum Erstellen eines Datensatzes diese 0-Punkt-Informationen in einer ** absichtlich ** Tabelle speichern.
** Muss ich die Standardwerte speichern? ** **.
Außerdem ist die Erstellung (INSERT) ** Update-Verarbeitung **. Bei der Aktualisierung müssen verschiedene Aspekte wie die ausschließliche Kontrolle und die doppelte Ausführung berücksichtigt werden. Sperren werden auch von INSERT erstellt.
Es wird jedoch schwierig sein, den Prozess zu schreiben, da Sie mit nur get keine Instanz des Modells abrufen können.
** Also get_or_new **
Wenn nicht, erstellen Sie get_or_new, das nur die Instanz erstellt und den Datensatz nicht erstellt. Auf diese Weise erhalten Sie eine Instanz ohne Nebenwirkungen.
Der Code sieht so aus
# models.py
from django.db import models
class User(models.Model):
point = models.IntegerField('Verdiente Punkte', default=0)
@classmethod
def get_or_new(cls, pk):
try:
return cls.objects.get(pk=pk)
except cls.DoesNotExist:
return cls(pk=pk)
# view.py
from django.views.generic import TemplateView
from .models import User
class IndexView(TemplateView):
template_name = "index.html"
def get(request, user_id):
user = User.get_or_new(user_id)
self.render_to_response({'user': user})
Dies nimmt die erforderliche Instanz von User und gibt natürlich 0 als user.point zurück. Es gibt noch andere Vorteile
etc. Bitte beachten Sie, dass der Aktualisierungsvorgang nicht auf der Grundlage der von get_or_new erhaltenen Daten durchgeführt werden sollte. Wenn Sie es zweimal tun, werden möglicherweise die falschen Daten geschrieben.
Diesmal ist es eine Referenzgeschichte, also werde ich das nächste Mal eine Update-Geschichte schreiben.
Recommended Posts