Django - Xử lý cookie
Đôi khi bạn có thể muốn lưu trữ một số dữ liệu trên cơ sở mỗi khách truy cập trang web theo yêu cầu của ứng dụng web của bạn. Luôn ghi nhớ rằng cookie được lưu ở phía máy khách và tùy thuộc vào mức độ bảo mật của trình duyệt máy khách của bạn, việc đặt cookie đôi khi có thể hoạt động và đôi khi có thể không.
Để minh họa việc xử lý cookie trong Django, hãy tạo một hệ thống bằng hệ thống đăng nhập mà chúng tôi đã tạo trước đó. Hệ thống sẽ giữ cho bạn đăng nhập trong X phút thời gian và quá thời gian đó, bạn sẽ thoát khỏi ứng dụng.
Đối với điều này, bạn sẽ cần thiết lập hai cookie, last_connection và tên người dùng.
Đầu tiên, hãy thay đổi chế độ xem đăng nhập của chúng tôi để lưu trữ tên người dùng và cookie last_connection -
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
Như đã thấy trong giao diện ở trên, cài đặt cookie được thực hiện bởi set_cookie phương thức được gọi trên phản hồi không phải là yêu cầu và cũng lưu ý rằng tất cả các giá trị cookie được trả về dưới dạng chuỗi.
Bây giờ chúng ta hãy tạo một FormView cho biểu mẫu đăng nhập, nơi chúng tôi sẽ không hiển thị biểu mẫu nếu cookie được đặt và không cũ hơn 10 giây -
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', {})
Như bạn có thể thấy trong formView ở trên, việc truy cập cookie bạn đặt, được thực hiện thông qua thuộc tính COOKIES (dict) của yêu cầu.
Bây giờ, hãy thay đổi tệp url.py để thay đổi URL để nó ghép nối với chế độ xem mới của chúng tôi -
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'))
Khi truy cập / myapp / connection, bạn sẽ nhận được trang sau:
Và bạn sẽ được chuyển hướng đến màn hình sau khi gửi -
Bây giờ, nếu bạn cố gắng truy cập lại / myapp / kết nối trong khoảng 10 giây, bạn sẽ được chuyển hướng trực tiếp đến màn hình thứ hai. Và nếu bạn truy cập lại / myapp / connection ngoài phạm vi này, bạn sẽ nhận được biểu mẫu đăng nhập (màn hình 1).