Django - การจัดการคุกกี้

บางครั้งคุณอาจต้องการจัดเก็บข้อมูลบางส่วนตามผู้เยี่ยมชมไซต์ตามข้อกำหนดของเว็บแอปพลิเคชันของคุณ โปรดจำไว้เสมอว่าคุกกี้จะถูกบันทึกไว้ในฝั่งไคลเอ็นต์และขึ้นอยู่กับระดับความปลอดภัยของเบราว์เซอร์ไคลเอนต์ของคุณการตั้งค่าคุกกี้สามารถใช้งานได้ในบางครั้งและบางครั้งอาจไม่ได้ผล

เพื่อแสดงการจัดการคุกกี้ใน Django มาสร้างระบบโดยใช้ระบบล็อกอินที่เราสร้างขึ้นก่อนหน้านี้ ระบบจะให้คุณเข้าสู่ระบบเป็นเวลา X นาทีและหลังจากนั้นคุณจะออกจากแอป

สำหรับสิ่งนี้คุณจะต้องตั้งค่าคุกกี้สองรายการคือ last_connection และชื่อผู้ใช้

ในตอนแรกให้เปลี่ยนมุมมองการเข้าสู่ระบบเพื่อจัดเก็บชื่อผู้ใช้และคุกกี้ 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

ดังที่เห็นในมุมมองด้านบนการตั้งค่าคุกกี้ทำได้โดยไฟล์ set_cookie วิธีการเรียกใช้การตอบสนองไม่ใช่การร้องขอและโปรดทราบว่าค่าคุกกี้ทั้งหมดจะถูกส่งกลับเป็นสตริง

ตอนนี้เรามาสร้าง formView สำหรับแบบฟอร์มการเข้าสู่ระบบซึ่งเราจะไม่แสดงแบบฟอร์มหากตั้งค่าคุกกี้และมีอายุไม่เกิน 10 วินาที -

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', {})

ดังที่คุณเห็นในแบบฟอร์มมุมมองด้านบนการเข้าถึงคุกกี้ที่คุณตั้งค่านั้นทำได้ผ่านแอตทริบิวต์ COOKIES (คำสั่ง) ของคำขอ

ตอนนี้เรามาเปลี่ยนไฟล์ url.py เพื่อเปลี่ยน URL เพื่อให้จับคู่กับมุมมองใหม่ของเรา -

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 คุณจะได้รับหน้าต่อไปนี้ -

และคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าจอต่อไปนี้เมื่อส่ง -

ตอนนี้หากคุณพยายามเข้าถึง / myapp / connection อีกครั้งในช่วง 10 วินาทีคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าจอที่สองโดยตรง และหากคุณเข้าถึง / myapp / การเชื่อมต่ออีกครั้งนอกช่วงนี้คุณจะได้รับแบบฟอร์มการเข้าสู่ระบบ (หน้าจอ 1)