ディレクトリ
@
クッキーの紹介
クッキーの起源
我々は、すべての==のHTTPプロトコルはステートレス==であることを知っています。
==ステートレスは、それが直接影響し、上記要求応答によって限定されるものではなく、各要求は、その実行と以前の要求の結果の後に独立した==要求であると直接関連していない手段、及びこれは、直接、後者のリクエストの応答に影響を与えることはありません。
唯一の生命の兆候を示した場合は、サーバーのために、各要求が新しいです。
==状態は、特定のセッションで生成されたクライアントとサーバーの両方のデータとして理解することができる。==
==何の状態は、これらのデータは==を保持されないことを理解することはできません。
データは、セッション中に発生した、私たちは、保存する必要があるということですクッキーが生まれたので、それは、「ホールド」することである。このようなシナリオで
***
クッキーとは何ですか
特異的に参照クッキーは、それは==サーバー少ない情報であるた==するブラウザに格納された鍵の束を送信します。サーバーブラウザにアクセスし、次の時間が自動的に有用な情報を抽出するために、サーバのためにこれらのキーと値のペアを運ぶでしょう。
クッキー自体は4096バイトまでサポート。
***
クッキーの原則
サーバーによって生成された、ブラウザはローカルに保存された要求を受け取る;ときに、ブラウザの訪問サーバーは、このクッキーの内容によって判断することができますので、ブラウザが自動的に、クッキーをもたらす「誰が」。
***
ビューのクッキー
私たちは、Chromeブラウザを使用する開発者向けツールを開きます。
操作クッキー
クッキーの取得
def login(request):
# 获取Cookie:
ret = request.COOKIES['user']
# ret = request.COOKIES.get('user')
# request.get_signed_cookie(key, salt='user', default='')
# request.get_signed_cookie('user', default=RAISE_ERROR, salt='', ax_age=None)
return render(request, 'login.html')
get_signed_cookieメソッドのパラメータ:
- デフォルト:デフォルト値
- 塩:塩暗号化
- max_ageの:バックグラウンドコントロールの有効期限
***
Cookieの設定
def test(request):
rep = HttpResponse('is ok')
# 设置Cookie:
rep.set_cookie('user', 'zyk')
# rep.set_signed_cookie('user', 'zyk', salt="加盐")
return rep
示すように、クッキーの設定を確認します。
set_cookieメソッドのパラメータ:
- キー:キー。
- 値= '':値。
- max_ageの=なし:タイムアウト。
- IEブラウザのタイムアウトを指定します:= Noneを満了していない(IE>が必要で期限が切れるので、まだされていない場合、それを設定します。)。
- パス=「/」:特別なと力/パス表現でクッキーパス:ページのパスを持つクッキーは、任意のURLのアクセスすることができます。
- ドメイン=なし:力のクッキーのドメイン名
- = Falseを確保します。https伝送
- HTTPのみ= Falseの:HTTPのみ伝送プロトコル、JavaScriptは(キャプチャの底に取得することができますが覆われていてもよい、絶対ではない)を取得することはできません。
***
クッキーを削除します
def test(request):
rep = HttpResponse('is ok')
# 删除Cookie:
rep.delete_cookie('user')
return rep
クッキー着陸バージョンチェック:
from django.shortcuts import render, redirect, HttpResponse
from blog01 import models
# 装饰器函数
def login_required(fn):
"""如果未登陆,将返回login页面"""
def inner(request, *args, **kwargs):
print(request.COOKIES.get('is_login'))
if request.COOKIES.get('is_login') != '1':
# 获取当前url路径
next = request.path_info
return redirect('/login/?next=%s' % next)
ret = fn(request, *args, **kwargs)
return ret
return inner
# 登陆功能
def login(request):
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if models.Userinfo.objects.get(name=user, pwd=pwd):
# 提取跳转之间访问的页面
next = request.GET.get('next')
rep = redirect(next) if next else redirect('/home/')
# 设置Cookie, max_age=1:指定过期时间为1秒
rep.set_cookie('is_login', '1', max_age=1)
return rep
return render(request, 'login.html')
@login_required
def home(request):
return HttpResponse("我是home页面")
@login_required
def home01(request):
return HttpResponse("我是home01页面")