English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django Cookiesの処理

時には、Webアプリケーションの要件に応じて、訪問者データを各サイトに保存する必要があることがあります。常に念頭に置いてください、cookiesはクライアント側に保存され、クライアントのブラウザのセキュリティレベルに応じてcookiesの有効期限を設定します。時には必要ない場合もあります。

Djangoでcookiesを処理する方法を説明するために、前に作成したログイン機能を使用するシステムを作成しましょう。システムでは、x分間ログインして、その後アプリケーションが自動的にログイン情報をログアウトします。

このためには、last_connectionとusernameの2つのcookiesを設定する必要があります。

まず、ログインビューを変更してユーザー名とlast_connection cookiesを保存しましょう。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.template import RequestContext
 def login(request):
    username = "not logged in"
    if request.method == "POST":
       #Get the posted form
       MyLoginForm = LoginForm(request.POST)
    if MyLoginForm.is_valid():
       username = MyLoginForm.cleaned_data['username']
    else:
       MyLoginForm = LoginForm()
    response = render_to_response(request, 'loggedin.html', {"username": username}, 
       context_instance = RequestContext(request))
    response.set_cookie('last_connection', datetime.datetime.now())
    response.set_cookie('username', datetime.datetime.now())
 
    return response

正如在上面这个视图,设置cookie是调用setcookie方法完成的,而不是请求响应的,还要注意所有Cookie的值是作为字符串返回的。

让我们为登录表单创建一个FormView,我们将不会显示的表单,如果Cookie设置并且在10秒内 −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
def formView(request):
    if 'username' in request.COOKIES and 'last_connection' in request.COOKIES:
       username = request.COOKIES['username']
       last_connection = request.COOKIES['last_connection']
       last_connection_time = datetime.datetime.strptime(last_connection[:-7], 
          "%Y-%m-%d %H:%M:%S")
       if datetime.datetime.now() - last_connection_time).seconds < 10:
          return render(request, 'loggedin.html', {"username": username})
       else:
          return render(request, 'login.html', {})
 
    else:
       return render(request, 'login.html', {})

formViewビューで設定したCookieにアクセスし、リクエストのCOOKIESクラス属性(辞書)を使用して完了します。

現在、url.pyファイルを変更してURLを変更し、新しいビューをマッチングします。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns('myapp.views',
    url(r'^connection/','formView', name = 'loginform'),
    url(r'^login/', 'login', name = 'login'))

アクセスする際に、 /myapp/connectionにアクセスすると、以下のページに移動します。-

送信後、以下の画面にリダイレクトされます。 -

今、あなたが10秒以内にアクセスすると、 /myapp/一度、二つ目のスクリーンに直接リダイレクトされます。再びアクセスすると、 /myapp/この範囲を超えると、ログインフォーム(スクリーン)が取得されます。1)。