Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erklärung, wie Django temporäre Daten überträgt
Um die kürzlich verwendete temporäre Datenübertragung zusammenzufassen
Es gibt drei Methoden: Cookie,Sitzung,Cache
Lassen Sie mich zunächst erklären, wie ich Cookies auswähle. Ich verwende sie nicht Oftmals werden Cookies von Benutzern deaktiviert und müssen zusammen mit der HttpResponse weitergegeben werden. Es gibt Einschränkungen.
Gleiches gilt für Sitzungen. Wählen Sie bei der Konfiguration keine Cookies und befolgen Sie einfach die Standarddatenbank des Systems.
Cache Im Speicher ist es bequem und einfach zu verwenden, aber es nimmt nur Speicher ein.... Es kann auch entsprechend der tatsächlichen Situation in der Bibliothek abgelegt werden
Das Folgende ist die Konfiguration und Verwendung dieser drei Methoden
Eins: Cookie
Cookie abrufen
HttpRequest.COOKIES
Ein Standardwörterbuch zurückgeben
Enthält alle Cookies, die Schlüsselwerte sind str
Speichercookie
HttpResponse.set_cookie(key, value='', max_age=None, Expires=None, path='/', domain=None, secure=None, httponly =Falsch)
max_age wird in Sekunden festgelegt und gespeichert. Die Dauer, wenn es „Keine“ ist, wird die Dauer mit der Client-
Domäne synchronisiert. Ein domänenübergreifendes Cookie setzen
domain=".lawrence.com" setzt ein www.lawrence.com, blogs Ein Cookie, das sowohl von .lawrence.com als auch von calendars.lawrence.com gelesen werden kann wird von der Domäne gelesen, in der es festgelegt ist.
kann als domian=[] geschrieben werden. Es wird kein Fehler gemeldet, aber es gibt keinen Test, ob es wirklich standortübergreifend möglich ist
httponly= False Wenn es auf True gesetzt ist, wird verhindert, dass das js des Clients Cookies liest
_cookie(key, path='/', domain=None)2: Sitzung
.contrib hinzufügen .sessions.middleware.SessionMiddleware
django1.10 für MIDDLEWARE, 1.08 für MIDDLEWARE_CLASSES
view1: res = HttpResponseRedirect(revers("namespace:name") res.set_cookie('key_set', 'value_set_view1', 60) # 在这里是没办法获取不到现在的这个cookie print(request.COOKIES) # 直接设置COOKIES COOKIES['key_dict'] = 'values_dict' # 这里可以看到上面设置的内容 print(request.COOKIES) return res view2: 假设上面的Response就是指向这里的 print(request.COOKIES) # 这里可以看到上面通过set设置的 key_set ,但是通过字典设置的key_dict就没有了und es sollte „django.contrib.sessions“ in INSTALLED_APPS geben Sie können festlegen Die Sitzung soll auf Cookie, Datei, Speicher und Datenbank basieren Basierend auf der Datenbank „django.contrib.sessions“ zu INSTALLED_APPS hinzufügen Nach Abschluss der Konfiguration führen Sie manage.py migrate aus
Cache
kann die Sitzung auf Cache-basiert eingestellt werden, wenn der Cache eingerichtet und der Cache-Speicherort auf Speicher eingestellt ist Nur wenn der Cache
SESSION_ENGINE kann direkt in der äußersten Ebene von Setting.py eingestellt werden Setting.py
SESSION_ENGINE = "django.contrib.sessions.backends.file"clear
()Spezielle Methoden
flush()
Löschen Sie die aktuellen Sitzungsdaten und löschen Sie die Cookies der Sitzung. Dieser Vorgang kann verwendet werden, wenn sich der Benutzer abmeldet
set_expiry(value) zum Festlegen der Sitzungs-Timeout-Länge
Wert kann auf eine positive Ganzzahl, Datentime/ timedelta,0,None
Ganzzahl (Sekunden) Ablauf, wenn n Sekunden lang keine Operation ausgeführt wirddatatime/timedelta Läuft zu diesem Zeitpunkt ab 0 Läuft ab, wenn der Browser geschlossen wirdNone Identisch mit dem globalen Standardwertget_expiry_age() Die Zeitdauer bis zum Ablauf der Sitzung. Gibt „None“ zurück, wenn die Sitzung abgelaufen ist, oder die Ablaufinformationen ist nicht angepasstSchlüsselwortparameterodification : Der letzte Änderungszeitpunkt der Sitzung, der Standardwert ist der aktuelle Wert. Sie können einen Wert davor oder danach übergeben, um zu bestimmen, wie lange er abläuft expory Angepasste Ablaufinformationen get_expiry_date() Gibt das Ablaufdatum zurück, abgelaufen oder uncustomized gibt die Cookie-Speicherzeit zurück
get_expire_at_browser_close()Gibt je nach Sitzungscookie des Benutzers „True“ oder „False“ zurück, wenn der Browser des Benutzers geschlossen wird. Läuft es ab? clear_expired()-Klassenmethode Löscht abgelaufene Sitzungen aus dem Sitzungsspeicher. cycle_key() erstellt eine neue Sitzung unter Beibehaltung der aktuellen Sitzungsdaten. Drei: Cache verwenden
Cache im Speicher (Standard)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache' ,
'LOCATION': 'unique-snowflake', # Der Speicher muss nur konfiguriert werden, wenn mehrere Speicher vorhanden sind, ist eine Konfiguration nicht erforderlich 🎜> }
}
Virtueller Cache: speichert nicht, behält aber die
Schnittstellebei, um die Konsistenz der Entwicklungs- und Produktionsumgebung sicherzustellen
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
CACHES-Parameter festlegen
TIMEOUT Das Standard-Timeout beträgt
300VERSION Die Standard-Cache-Versionsnummer OPTIONEN: Dieser Parameter sollte an das Cache-Backend übergeben werden. Die Liste der gültigen Optionen variiert je nach Cache-Backend und Caches, die von Bibliotheken von Drittanbietern unterstützt werden, konfigurieren diese Optionen direkt in der zugrunde liegenden Cache-Bibliothek.
Das Cache-Backend implementiert seine eigene Auswahlstrategie (Datei, Datenbank, Speicher) und implementiert die folgenden Optionen:
MAX_ENTRIES: Die maximal zulässige Anzahl von Einträgen im Cache, wenn diese überschritten wird Zahl, es wird alt sein. Der Standardwert dieses Parameters ist 300.
CULL_FREQUENCY: Das Verhältnis der gelöschten Einträge, wenn MAX_ENTRIES erreicht ist. Das tatsächliche Verhältnis beträgt 1 / CULL_FREQUENCY. Wenn Sie also CULL_FREQUENCY auf 2 setzen, wird die Hälfte des Caches gelöscht, wenn der durch MAX_ENTRIES festgelegte Wert erreicht ist. Dieser Parameter sollte eine Ganzzahl sein, der Standardwert ist 3.
Wenn Sie den Wert von CULL_FREQUENCY auf 0 setzen, bedeutet dies, dass der Cache geleert wird, wenn MAX_ENTRIES erreicht ist. Bei einigen Cache-Backends (insbesondere Datenbanken) geht dies mit vielen Cache-Fehlern einher.
Beispiel:
wird im Speicher zwischengespeichert und die Zeitüberschreitung beträgt 60*10 600 Sekunden, 500 Elemente werden zwischengespeichert, jedes Mal 1/5 löschen
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem. LocMemCache' ,
'TIMEOUT': 600,
'OPTIONS': {
'MAX_ENTRIES': 500,
'CULL_FREQ UENCY': 5
} }
}
}
Cache-Strategie: Die gesamte Site zwischenspeichern, die Ansicht zwischenspeichern, Vorlagenfragmente zwischenspeichern
Die gesamte Site zwischenspeichern:
setting.py
1.08
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
1.10
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
Achten Sie auf die falsche Reihenfolge
Fügen Sie dann den Wert in der äußersten Ebene von Setting.py hinzu
CACHE_MIDDLEWARE_ALIAS – der Alias für den gespeicherten Cache , wenn nicht festgelegt, ist es „Standard“ '
CACHE_MIDDLEWARE_SECONDS – Wie viele Sekunden jede Seite zwischengespeichert werden muss.
CACHE_MIDDLEWARE_KEY_PREFIX – Wenn der Cache von mehreren Websites mit demselben Django gemeinsam genutzt wird Installation, dann wird dieser Wert auf den aktuellen Website-Namen oder eine andere eindeutige Zeichenfolge gesetzt, die diese Django-Instanz darstellt, um Schlüsselkonflikte zu vermeiden. Wenn es Ihnen egal ist, können Sie es auf eine leere Zeichenfolge setzen.
Einzelansicht-Cache
von django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
pass
Mehrere URLs verweisen auf dieselbe Ansicht. Jede URL wird separat zwischengespeichert, z. B.:
url(r'^foo/([0-9] { 1,2})/$', my_view),
foo/12
foo/13 verwendet unterschiedliche Caches, aber beide 12 verwenden dasselbe
@cache_page ( 60 * 15, Cache="special_cache")
Beispiel: Verwendet nur den angegebenen Cache
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT': 600,
'OPTIONS': {
' Max_Entries ': 500,
'Cull_frequenz': 5
}
},'Special_cache': {
'TIMEOUT': 600,
'OPTIONS': {
'MAX_ENTRIES': 500 >Wenn Sie Sie müssen auf /cache/ und /nocache/ zugreifen. Sie verweisen ebenfalls auf dieselbe Seite, aber eine wird zwischengespeichert und die andere nicht.
Sie können angeben, welche Seite in der URL und nicht in der Ansicht zwischengespeichert werden soll
url(r'^cache/$', cache_page(60 * 15)(my_view), name='cache'),
url(r'^nocache/$',my_view , name='nocache' ),
Vorlagencache
{% Ladecache %}
{% Cachedauer (Sekunden) Name%}
{% endcache name%}
Flexiblere Nutzung des Caches
Importieren Sie die Caches von django.core.cache in Ansichten
cad = Caches['default'] # The Der Name ist hier derselbe wie in CACHES. Die Konfiguration ist derselbe. 'value',duration) Wenn die Dauer nicht festgelegt ist, wird ein Standardwert oder ein benutzerdefinierter Wert verwendet.
cad.get('key') Wenn der Schlüssel nicht vorhanden ist, wird „None“ zurückgegeben Geben Sie auch den Standardwert get('key','default value') an. Wenn kein Schlüssel vorhanden ist, wird '
cad.add('key','value')' zurückgegeben. Wenn der Schlüssel nicht vorhanden ist, fügen Sie einen Schlüsselwert hinzu. Wenn der Schlüssel bereits vorhanden ist, wird keine Operation ausgeführt. Der Wert ist immer noch der vorherige Wert
set_many ({'key1':'v1','k2'). :'v2'})
get_many(['key1','key2'..]) Holen Sie sich den Wert des Schlüssels in der Liste. Der Rückgabewert ist Standard Dictionary
delete(' key')
delete_many(['key1','key2']) Wenn der Schlüssel nicht existiert
clear() alle Caches löschen
close() schließt den Cache
cad.incr('key',value) ist äquivalent zu cad['key']+=value Natürlich ist es nur äquivalent und kann nicht so gemacht werden
Seitdem unten Die Ebene verwendet
new_value = value + delta
. Wenn der Wert „a“ ist, ist dies auch möglich, solange +
cad.decr verwendet werden kann ('key',value) minus, wie oben
Cache-Version: VERSION kann denselben Schlüssel übergeben, aber unterschiedliche Werte speichern, implementiert durch version
cad .set('key1' ,'valu',version=3) Setze key1 auf version3,
ca.set('aa','dd',version=3)
ca .set('aa', 'e',version=4)
print(ca.get('aa',version=3)) #=> dd
print(ca.get('aa',version=4)) #=> 🎜>
incr_version('key',value) Ebenso unterstützt value +-decr_version('key',value)Es wird jedoch nicht empfohlen, str direkt usw. zu verwenden . Es wird nicht empfohlen, Ihre eigene Klasse zu verwenden. Wenn Sie jedoch wirklich eine benutzerdefinierte Klasse verwenden müssen, um die Version zu füllen, müssen folgende Methoden neu geschrieben werden: (python3.x) straddsubDas obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie Django temporäre Daten überträgt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!