Maison >développement back-end >Tutoriel Python >Explication détaillée de la façon dont Django transfère les données temporaires
Pour résumer le transfert de données temporaire qui a été utilisé récemment
Il existe trois méthodes, cookie,session,cache
Laissez-moi d'abord vous expliquer comment choisir pour moi. J'ai seulement besoin de comprendre les cookies. Je ne Je ne les utilise pas souvent car les cookies des utilisateurs seront désactivés et devront être transmis avec la réponse Http. Il y a des limitations
Il en va de même pour les sessions, ne choisissez pas d'utiliser des cookies et suivez simplement le système. base de données par défaut.
cache En mémoire, c'est pratique et simple à utiliser, mais cela ne prend que de la mémoire.... Il peut également être placé dans la bibliothèque. Considérez-le en fonction de la situation réelle
Voici la configuration et l'utilisation de ces trois méthodesUne : cookieset_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure= Aucun, httponly=False)
max_age est défini et enregistré en secondes La durée, lorsqu'elle est Aucune, la durée est synchronisée avec le client domaine Définir un cookie inter-domainesdomain=".lawrence.com" définira un www.lawrence.com, blogs Un cookie lisible à la fois par .lawrence.com et
calendars.lawrence.com. Sinon, le cookie. ne sera lu que par le domaine où il est défini.
peut être écrit comme domian=[], aucune erreur ne sera signalée, mais il n'y a aucun test pour savoir s'il peut vraiment être multisite httponly=False Lorsqu'il est défini sur True, il empêche lejs du client de lire les cookies
delete_cookie(key, path='/', domain=None)
Supprimer le cookie spécifié par key, quand Rien ne se passera lorsque le cookie n'existe pasQuand set_cookie spécifie le chemin et le domaine, ils doivent être cohérents lors de la suppression, sinon ils ne seront pas supprimésview1: 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就没有了2 : Utiliser la session dans l'ensemble de plug-ins middleware Ajouter
django.contrib.sessions.middleware.SessionMiddleware
django1.10 pour MIDDLEWARE, 1.08 pour MIDDLEWARE_CLASSES et il devrait y avoir 'django.contrib.sessions' dans INSTALLED_APPS. Vous pouvez définir la session pour qu'elle soit basée sur un cookie, un fichier, une mémoire, une base de données En fonction de la base de données, ajoutez 'django.contrib.sessions' à INSTALLED_APPSMemcached comme backend
Sinon, il est préférable d'utiliser directement le cache, qui est plus flexible et a une charge plus petiteclear
()Méthodes spéciales
flush()
Supprimez les données de la session en cours et supprimez les cookies de la session. Cette opération peut être utilisée lorsque l'utilisateur se déconnecte
set_expiry(value) pour définir la durée du délai d'expiration de la session
la valeur peut être définie sur un entier positif, datatime/ timedelta,0,None
Entier (secondes) Expiration si aucune opération n'est effectuée pendant n secondes
datatime/timedelta Expire à ce moment
0 Expire lorsque le navigateur est fermé
Aucun Identique à la valeur globale par défaut
get_expiry_age() La durée jusqu'à l'expiration de la session renvoie Aucun lorsque la session a expiré ou les informations d'expiration. n'est pas personnalisé
Paramètres des mots clés
odification : L'heure de la dernière modification de la session, la valeur par défaut est la valeur actuelle Vous pouvez passer une valeur avant ou après pour déterminer combien de temps elle expirera <.>
expory Informations d'expiration personnalisées get_expiry_date() Renvoie la date d'expiration, expirée ou non personnalisée renvoie la durée de stockage du cookie
get_expire_at_browser_close()Renvoie Vrai ou Faux, selon le cookie de session de l'utilisateur lorsque le navigateur de l'utilisateur est fermé. Va-t-il expirer ? Méthode de classe clear_expired() Efface les sessions expirées du stockage de session. cycle_key() crée une nouvelle session tout en conservant les données de la session en cours. Trois : Utiliser le cache
Cache virtuel : ne met pas en cache, mais conserve l'
interface
pour assurer la cohérence du environnement de développement et de productionCACHES = { 'default' : {'BACKEND' : 'django.core.cache.backends.dummy.DummyCache',} Définir les paramètres CACHES TIMEOUT Le délai d'expiration par défaut est
300
soit cinq minutes} } }}
Stratégie de cache : mettre en cache l'intégralité du site, mettre en cache la vue, mettre en cache les fragments de modèle
Cache l'intégralité du site :
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',
]
Faites attention au mauvais ordre
Ajoutez ensuite la valeur dans la couche la plus externe de settings.py
CACHE_MIDDLEWARE_ALIAS - l'alias du cache stocké , s'il n'est pas défini, ce sera « par défaut » '
CACHE_MIDDLEWARE_SECONDS – Combien de secondes chaque page doit être mise en cache.
CACHE_MIDDLEWARE_KEY_PREFIX – Si le cache est partagé par plusieurs sites Web utilisant le même Django installation, puis cette valeur définie sur le nom du site Web actuel, ou sur une autre chaîne unique qui représente cette instance de Django pour éviter les conflits de clés. Si vous ne vous en souciez pas, vous pouvez le définir sur une chaîne vide.
Cache à vue unique
de django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request) :
pass
Plusieurs URL pointent vers la même vue, chaque URL sera mise en cache séparément, comme :
url(r'^foo/([0-9] { 1,2})/$', my_view),
foo/12
foo/13 utilise des caches différents, mais les deux 12 utilisent le même
@cache_page ( 60 * 15, cache="special_cache")
Par exemple : utilisera uniquement le cache spécifié
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT' : 600,
'OPTIONS' : {
' Max_Entries ' : 500,
'Cull_fréquence' : 5
}
},'Special_cache' : {
'TIMEOUT' : 600,
'OPTIONS' : {
'MAX_ENTRIES' : 500 >Lorsque vous . besoin d'accéder à /cache/ et /nocache/, ils pointent également vers la même page, mais l'un est en cache et l'autre ne l'est pas
Vous pouvez spécifier quelle page mettre en cache sur l'url, pas sur la vue
url(r'^cache/$', cache_page(60 * 15)(my_view), name='cache'),
url(r'^nocache/$',my_view , name='nocache' ),
Cache des modèles
{% chargement du cache %}
{% durée du cache (secondes) nom%}
{% endcache name%}
Utilisation plus flexible du cache
Importer les caches de django.core.cache dans les vues
cad = caches['default'] # Le le nom ici est le même que dans CACHES La configuration est la même
cas = caches['special_cache']
Méthodes couramment utilisées
cad.set('key', 'value',duration) Si la durée n'est pas définie, elle sera prise Valeur par défaut ou valeur personnalisée
cad.get('key') Si la clé n'existe pas, elle renverra Aucune Vous pouvez. spécifiez également la valeur par défaut get('key','default value'). S'il n'y a pas de clé, il renverra '
cad.add('key','value'). Lorsque la clé n'existe pas, ajoutez clé-valeur. Lorsque la clé existe déjà, aucune opération n'est effectuée. La valeur est toujours la valeur précédente
set_many ({'key1':'v1','k2'. :'v2'})
get_many(['key1','key2'..]) Récupère la valeur de la clé dans la liste La valeur de retour est standard Dictionary
delete(' key')
delete_many(['key1','key2']) Lorsque la clé n'existe pas
clear() supprime tous les caches
close() ferme le cache
cad.incr('key',value) est équivalent à cad['key']+=value Bien sûr, c'est juste équivalent et ne peut pas être fait comme ça
Depuis le bas la couche utilise
new_value = value + delta
, alors lorsque la valeur est 'a', c'est également possible, à condition que + puisse être utilisé
cad.decr ('key',value) moins, comme ci-dessus
Version du cache : VERSION peut transmettre la même clé, mais enregistrer des valeurs différentes, implémentées via la version
cad .set('key1' ,'valu',version=3) Définissez key1 sur version3,
ca.set('aa','dd',version=3)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!