بخش های اصلی

آموزش Django

Django – هَندِل کردنِ Cookieها

ممکنه گاهی بخواین بر اساس نیازهای برنامه وب، اطلاعاتی راجع به برای هریک از بازدیدکننده های سایت را ذخیره کنین. این را همیشه به یاد داشته باشین که cookieها، سمت کلاینت ذخیره میشن و بر اساس سطح امنیتیِ مرورگر کلاینت، ممکنِه تنظیمات کوکی ها گاهی کار کنه و گاهی کار نکنه.

برای نشان دادن نحوه ی هَندِل کردن کوکی ها در Django، سیستمی با استفاده از سیستمِ loginای که پیش تر ایجاد کردیم، ایجاد می کنیم. این سیستم حالتِ logged in  را برای مدتِ x دقیقه حفظ می کنه و بعد از آن زمان شما را از برنامه خارج می کنه.

برای انجام این کار، باید دو کوکی به نام هایِ last_connection و username تعریف کنین.

ابتدا viewیِ login را بصورت زیر تغییر میدیم تا کوکی هایِ last_connection و username را ذخیره کنه :

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

همانطور که در viewیِ بالا مشاهده می کنین، تعریف کوکی ها با متدِ set_cookie انجام شده که بعنوانِ response فراخوانی شده و نه بعنوانِ request، و در نظر داشته باشین که تمام مقادیر کوکی ها بصورت رشته برگردانده میشن.

در ادامه برای فرمِ login یک 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', {})

همانطور که در formView بالا مشاهد می کنین، می توانید از طریقِ خصیصه ی COOKIES (dict) مربوط به request به  کوکی ای که تعریف کردین، دسترسی پیدا کنین.

اکنون برای تغییر URL، فایلِ url.py را تغییر میدیم تا با view جدید سازگار بشه :

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'))

اگه به accessing /myapp/connection برین، صفحه ای بصورت زیر خواهید دید :

django cookies handling

و بعد از submit کردن به صفحه ی زیر هدایت میشین :

cookies handling redirected page

حالا در محدوده ی 10 ثانیه به access /myapp/connection برین، مستقیماً به صفحه ی دوم هدایت میشین و اگه بعد از 10 ثانیه دوباره به access /myapp/connection برین، فرمِ login (صفحه ی اول) به شما نمایش داده میشه.

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش Django

Learn Django

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد