Django が一時データを転送する方法の詳細な説明

高洛峰
リリース: 2017-03-23 14:52:27
オリジナル
1948 人が閲覧しました

最近使った一時的なデータ転送をまとめると

方法は3つあり、cookieセッションキャッシュ

まず、私が何を選択するかを説明します。Cookie はユーザーが閉じるため、

Session と一緒に渡す必要があるため、私はあまり使用しません。設定中に設定する必要があります。Cookie を使用しない場合は、システムのデフォルトのデータベースを使用するだけで便利です。メモリ.... ライブラリに置くこともできます。 実際の状況に基づいて検討してください。 以下に、これら 3 つのメソッドの構成と使用方法を示します。

1: cookie

cookie を取得します。 HttpRequest.COOKIES

    すべての Cookie を含む標準辞書
  • を返します。キーの値は str です

ストレージ cookie

HttpResponse.

set
    _cookie(
  • key

    , value='', max_age=) None、expires=None、path='/'、domain=None、secure=None、httponly=False)

  • max_age は、保存期間を秒単位で設定します。None の場合、期間はクライアント

ドメインと同期されます。クロスドメイン Cookie を設定します。 Cookie は設定されているドメインでのみ読み取られます は domian=[] として記述でき、エラーは報告されませんが、実際にはクロスサイトである可能性があります httponly=False の場合。 True に設定すると、クライアントの

js

が Cookie を読み取ることができなくなります

削除操作

delete

_cookie(key, path='/', domain=None ) key で指定された Cookie を削除します。 Cookieが存在しない場合は何も起こりません

    set_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: セッションを使用します

  • django

    .contrib.sessions.middleware.SessionMiddleware

  • django1.10 は MIDDLEWARE、1.08 は MIDDLEWARE_CLASSES
をミドルウェア プラグイン セットに追加します

そして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" に設定します

。キャッシュベースに設定できます。キャッシュのみ
    Memcached
  • を使用します。これはバックエンドとしてのみ推奨されます

それ以外の場合は、より柔軟で負荷が小さいキャッシュを直接使用することをお勧めします

SESSION_ENGINE settings.py

Session

バックエンド.base.SessionBase

ビュー内のセッションを取得

request.session 標準クラスの辞書を取得
  • メソッドも辞書と同じ(プライベートメソッドを使用しない)

    session['fav_color'] = 'blue' セッションを設定
get(key,default=None)

例: fav_color = request.session.get( 'fav_color', 'red')

pop(key) はキーと値のペアを削除し、値を返します

例: fav_color = request.session.pop('fav_color')

keys()

items()

setdefault(key[,default=None]) キーが存在する場合は、対応する値を返します。存在する場合、キーと値のペアを辞書に追加し、デフォルト値を返します

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 '
  • }

    }
パスは絶対パス、つまりディレクトリであり、現在のユーザー

の 42 (読み取りおよび書き込み) 権限が必要です

データベースにキャッシュされています

CACHES = {

'default': {

' BACKEND': 'django.core.cache.backends.db.DatabaseCache',

'LOCATION': 'my_cache_table', #テーブル名、正当かつ未使用

}

}

python manage.py createcachetable キャッシュテーブルを作成します。テーブル名はLOCATIONで指定します

メモリ内キャッシュ(デフォルト)

CACHES = {

'default': {

'BACKEND': 'django.core.cache.backends.locmem. LocMemCache ',

'LOCATION': 'unique-snowflake', # メモリが複数ある場合のみ設定が必要です。メモリが 1 つだけの場合は設定する必要はありません

}

}

仮想キャッシュ: キャッシュされませんが、予約されています

インターフェイス

は、開発環境と運用環境の一貫性を確保するために使用されます

CACHES = {

'default': {

'BACKEND': 'django.core.cache.backends. dummy.DummyCache',

}

}

CACHES パラメーターを設定します

TIMEOUT デフォルトのタイムアウトは

300

、つまり 5 分です

VERSION デフォルトのキャッシュのバージョン番号

オプション:パラメータは次のようにする必要がありますキャッシュ バックエンドに渡されます。有効なオプションのリストは、キャッシュ バックエンドによって異なります。サードパーティ ライブラリでサポートされているキャッシュでは、これらのオプションが基礎となるキャッシュ ライブラリに直接設定されます。
  • キャッシュ バックエンドは独自の選択戦略 (ファイル、データベース、メモリ) を実装し、次のオプションを実装します:

    MAX_ENTRIES: キャッシュ内で許可されるエントリの最大数。この数を超えると、古い値が使用されます。このパラメータのデフォルトは 300 です。
CULL_FREQUENCY: MAX_ENTRIES に達したときの、削除されたエントリの割合。 実際の比率は 1 / CULL_FREQUENCY なので、CULL_FREQUENCY を 2 に設定すると、MAX_ENTRIES で設定された値に達したときにキャッシュの半分が削除されます。このパラメータは整数である必要があり、デフォルトは 3 です。

CULL_FREQUENCY の値を 0 に設定すると、MAX_ENTRIES に達したときにキャッシュがクリアされることを意味します。一部のキャッシュ バックエンド (特にデータベース) では、多くのキャッシュ ミスが発生します。例:

メモリ内にキャッシュし、タイムアウトは 60*10 600 秒、500 個のアイテムをキャッシュし、それぞれ 1/5 を削除します。 time

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート