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

Django 쿠키 처리

때때로, 웹 애플리케이션의 요구에 따라 방문자의 일부 데이터를 각 사이트에 저장할 수 있습니다. 항상 기억하시기 바랍니다, 쿠키는 클라이언트에 저장되며, 클라이언트 브라우저의 보안 수준에 따라 쿠키의 유효 기간을 설정할 수 있으며, 필요하지 않을 수도 있습니다.

Django에서 쿠키 처리 방법을 설명하기 위해, 이전에 생성한 로그인 기능을 사용하는 시스템을 만들어 보겠습니다. 시스템은 x분 동안 로그인을 허용하고, 이 시간이 지나면 애플리케이션이 자동으로 로그인 정보를 로그아웃합니다.

이를 위해, 두 개의 쿠키를 설정해야 합니다: last_connection과 username.

먼저, 우리는 로그인 뷰를 변경하여 사용자 이름과 last_connection 쿠키를 저장하도록 하겠습니다.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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를 만들어 보겠습니다. Cooki가 설정되어 있고10초 내에서 −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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 뷰에서 설정한 쿠키를 접근할 수 있으며, 요청의 COOKIES 클래스 속성(사전)을 통해 완료할 수 있습니다.

지금 url.py 파일을 수정하여 URL을 변경하고 새로운 뷰를 매칭하십시오 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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/연결, 다음 페이지로 이동하게 됩니다-

제출 후 다음 인터페이스로 리디렉션됩니다 -

지금, 만약 당신이10초 내에 방문 /myapp/연결 한 번, 두 번째 스크린으로 직접 리디렉션됩니다. 다시 방문하면 /myapp/연결 범위를 벗어나면 로그인 폼(스크린1)。