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)