ホームページ >バックエンド開発 >Python チュートリアル >Django が一時データを転送する方法の詳細な説明
最近使った一時的なデータ転送をまとめると
まず、私が何を選択するかを説明します。Cookie はユーザーが閉じるため、
Session と一緒に渡す必要があるため、私はあまり使用しません。設定中に設定する必要があります。Cookie を使用しない場合は、システムのデフォルトのデータベースを使用するだけで便利です。メモリ.... ライブラリに置くこともできます。 実際の状況に基づいて検討してください。 以下に、これら 3 つのメソッドの構成と使用方法を示します。
1: cookie
cookie を取得します。 HttpRequest.COOKIES
を返します。キーの値は str です
ストレージ cookie
HttpResponse.
set, value='', max_age=) None、expires=None、path='/'、domain=None、secure=None、httponly=False)
ドメインと同期されます。クロスドメイン Cookie を設定します。 Cookie は設定されているドメインでのみ読み取られます は domian=[] として記述でき、エラーは報告されませんが、実際にはクロスサイトである可能性があります httponly=False の場合。 True に設定すると、クライアントの
jsが Cookie を読み取ることができなくなります
delete_cookie(key, path='/', domain=None ) key で指定された Cookie を削除します。 Cookieが存在しない場合は何も起こりません
標準辞書なのでリクエストしてください。 COOKIES['key']='value' で Cookie にコンテンツを入れることもできますが、その値は次のビューに渡されると失われます
1 つのビューで設定する前に、Cookie を次のビューに渡す必要があります次のように使用できます:
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就没有了
2: セッションを使用します
.contrib.sessions.middleware.SessionMiddleware
そしてINSTALLED_APPS に「django.contrib.sessions」があるはずです。
Cookie、ファイル、メモリ、データベースに基づいてセッションを設定できます
データベースに基づいて、「django.contrib.sessions」を INSTALLED_APPS に追加します
設定が完了したら、manage.py merge を実行します
ファイルに基づいて SESSION_ENGINE を「django.contrib.sessions.backends.file」に設定します。
同時に、SESSION_FILE_PATH を設定してファイルの保存場所を指定できます。それ以外の場合は、システムのデフォルト値 (変更なしの /tmp) が使用されます
Cookie ベースのセッションは推奨されません。 Cookie を使用しないように設定します
キャッシュが設定され、キャッシュの保存場所がメモリに設定されている場合、セッションは SESSION_ENGINE を "django.contrib.sessions.backends.signed_cookies" に設定します
SESSION_ENGINE = "django.contrib.sessions.backends.file"の最外層で直接設定できます
セッションの基本クラスを使用しますclear
()特別なメソッド
flush()
現在のセッションデータを削除し、セッションのCookieを削除します。この操作は、ユーザーがログアウトするときに使用できます
set_expiry(value) は、セッションのタイムアウトの長さを設定するために使用できます
値は、正のinteger,datatime/timedelta,0,None
integer (秒)に設定できます) n 秒間操作なし Expiration
datatime/timedelta この時点で期限切れ
0 ブラウザを閉じると期限切れ
None グローバルデフォルト値と同じ
get_expiry_age() セッションが期限切れになるまでの時間 戻り値 Noneセッションの有効期限が切れた場合、または有効期限情報がカスタマイズされていない場合
キーワード パラメータ
変更: セッションの最終変更時刻、デフォルトは現在の値です 有効期限が切れるまでの期間を決定するために前後の値を渡すことができます
expory カスタマイズされた有効期限情報
get_expiry_date() 有効期限を返します。期限切れまたは未カスタマイズの場合は Cookie の保存時間を返します。
get_expire_at_browser_close()
ユーザーのセッション Cookie がいつ期限切れになるかに応じて、True または False を返します。ユーザーのブラウザが閉じられています。
clear_expired() クラス メソッド セッション ストレージから期限切れのセッションをクリアします。
cycle_key() 現在のセッションデータを保持したまま、新しいセッションを作成します。
3 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', # ファイルパス、'c:/tmp/django_cache under に変更された場合win '仮想キャッシュ: キャッシュされませんが、予約されています
インターフェイス
は、開発環境と運用環境の一貫性を確保するために使用されます CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends. dummy.DummyCache', }} CACHES パラメーターを設定します TIMEOUT デフォルトのタイムアウトは300
、つまり 5 分です VERSION デフォルトのキャッシュのバージョン番号 オプション:パラメータは次のようにする必要がありますキャッシュ バックエンドに渡されます。有効なオプションのリストは、キャッシュ バックエンドによって異なります。サードパーティ ライブラリでサポートされているキャッシュでは、これらのオプションが基礎となるキャッシュ ライブラリに直接設定されます。caches = {
'default':{
stelus spuling off -‐ ‐ ‐ 'backend'を使用する:
'max_entries':500、
'cull_frequency':5
}
}
}
キャッシュ戦略: サイト全体をキャッシュ、ビューをキャッシュ、テンプレートフラグメントをキャッシュ
サイト全体をキャッシュ:
setting.py
1.08
MIDDLEWARE_CLASSES = (
)ミドルウェア。キャッシュ.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
1.10
MIDDLEWARE = [
'django.ウェアキャッシュ.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
順序に注意してください
そして設定の最外層に値を追加します.py
CACHE_MIDDLEWARE_ALI AS – ストレージに使用されるキャッシュのエイリアス。設定されていない場合は、「デフォルト」になります。
CACHE_MIDDLEWARE_SECONDS - 各ページをキャッシュする必要がある秒数。
CACHE_MIDDLEWARE_KEY_PREFIX - キャッシュが共有されている場合。同じ Django インストール を使用する複数の Web サイトによって、キーの競合を避けるために、この値は現在の Web サイト名、またはこの Django インスタンスを表す他の一意の string に設定されます。 気にしない場合は、空の文字列を設定できます。
シングルビューキャッシュ
from django.views.decorators.cache import catch_page
@cache_page(60 * 15)
def my_view(request):
Pass
複数の URL が同じビューを指し、各 URL は次のように個別にキャッシュされます:
url(r'^foo/([0-9]{1,2})/$', my_view)、
foo/12
foo/13 は異なるキャッシュを使用します。ただし、2 つの 12 は同じ
@cache_page(60 * 15,cache="special_cache") を使用します
例: 指定されたキャッシュのみを使用します
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT': 600,
'OPTIONS': {
'MAX_ENTRIES': 500,
'CULL_FREQUENCY': 5
}
} ,
'special_cache': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'TIMEOUT': 600,
'OPTIONS': {
リース: 500 ,
'CULL_FREQUENCY': 5
}}}
/cache/and/nocache/ にアクセスする必要がある場合、URL でキャッシュする方法を指定します
どのページを URL 上ではなく、URL 上でキャッシュするかを指定できます。ビュー
url(r'^cache/$',cache_page(60 * 15)(my_view), name='cache'),
url(r'^nocache/$',my_view, name='nocache' ),
テンプレート キャッシュ
{% ロード キャッシュ %}
{% キャッシュ期間 (秒) 名前%}
{% エンドキャッシュ名%}
キャッシュをより柔軟に使用する
django.core のキャッシュをインポートします。ビュー内のキャッシュ
cad = caches['default'] # ここでの名前は CACHES の設定と同じです
cas = caches['special_cache']
一般的に使用されるメソッド
cad.set('key', 'value',duration) 期間が設定されていない場合は、デフォルト値またはカスタム値が採用されます
cad.get('key') キーが存在せずNoneを返します、デフォルトのValueを指定することもできます get(' key','default value')、キーが存在しない場合は、'default value'を返します
cad.add('key','value') キーが存在しない場合、キーがすでに存在する場合は、key-valueを追加します存在します 何も操作しないと、値は前の値のままです
set_many({'key1':'v1','k2':'v2'})
get_many(['key1','key2'..])リストを取得 キーの値 戻り値は標準辞書
delete('key')
delete_many(['key1','key2']) キーが存在しない場合
clear() 全て削除キャッシュ
close() キャッシュを閉じる
cad.incr('key',value) は cad['key']+=value と等価です もちろん、それは単に等価なので実行できません
最下層が使用しているため
new_value = value + delta
では、value が 'a' の場合、+ が使用できる限り可能です
cad.decr('key',value) マイナス、上記と同じです キャッシュバージョン: VERSIONは同じキーを渡すことができますが、異なる値が保存され、バージョンを通じて実装されます
cad.set('key1','valu',version=3) key1を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)) #=> e
incr_version('key' ,value) 同様に、value は +-
decr_version('key',value) をサポートします
しかし、独自のクラスを使用することはおろか、str を直接使用することはお勧めできません
しかし、本当にカスタム クラスを使用する必要がある場合バージョンを記入すると、書き換える必要があるメソッドは (python3.x)
str
add
sub
です以上がDjango が一時データを転送する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。