English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
時には、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)。