بخش های اصلی

آموزش Django

Django – Sessionها

همانطور که پیش تر هم گفتیم، می توانیم برای برنامه ی وب از کوکی های سمت کلاینت جهت ذخیره ی مقدار زیادی داده ی کارآمد استفاده کنیم. دیدید که می توانید از کوکی های سمت کلاینت برای ذخیره ی انواع مختلفی از داده ها برای برنامه ی وب استفاده کنین. انجام این کار بر اساس اهمیت داده ای که ذخیره می کنین، مشکلات امنیتی زیادی به همراه داره.

Django، بنابر دلایل امنیتی، برای هندِل کردن کوکی ها از فریم ورکِ session استفاده می کنه. Sessionها برای انتزاع دریافت و فرستادن کوکی ها استفاده میشن، داده ها در سمت سرور ذخیره میشن (مثل پایگاه داده) و کوکی های سمت کلاینت برای شناسایی شدن، فقط یک session ID دارن. Sessionها برای اجتناب از مواردی که مرورگر کاربر با مقداری تنظیم شده باشه که کوکی ها را نپذیره، کارآمد هستن.

نصب و راه اندازیِ Sessionها

در Django، می توانید با اضافه کردن چند خط کد به آپشن هایِ MIDDLEWARE_CLASSES و INSTALLED_APPS، sessionها را در پروژه فعال کنین. باید این کار را هنگام ایجاد پروژه انجام بدین ولی بهتره بدانین که MIDDLEWARE_CLASSES باید مقدار زیر را داشته باشه :

'django.contrib.sessions.middleware.SessionMiddleware'

و INSTALLED_APPS هم باید مقدار زیر را داشته باشه :

'django.contrib.sessions'

بصورت پیش فرض، Django، اطلاعاتِ session را در پایگاه داده ذخیره می کنه (جدولِ django_session یا collection)، ولی می توانید موتور را طوری پیکربندی کنین که اطلاعات را با روش های دیگه ای ذخیره کنه، مثل: فایل یا حافظه ی نهان.

وقتی session فعال بشه، هر درخواستی (اولین آرگومانِ هر view در Django) یک خصیصه ی session (dict) داره.

در ادامه برای نشان دادن نحوه ی ایجاد و ذخیره ی sessionها، یک مثال ساده آورده شده. پیش تر یک سیستم ساده ی login ایجاد کردیم (به بخش "پردازشِ فرمِ Django"و بخشِ  "هَندِل کردنِ کوکی ها در Django" مراجعه کنین). در این مثال نام کاربری را در کوکی ذخیره می کنیم، به این ترتیب درصورتی که کاربر، خارج نشده باشه، وقتی بخواد به صفحه ی login بره، فرمِ login را نخواهد دید. در اصل می خوایم با ذخیره ی کوکی های سمت سرور، سیستمِ loginای که در بخشِ "هندِل کردن کوکی ها در Django" ایجاد کردیم را امن تر کنیم.

برای انجام این کار، ابتدا viewیِ login را تغییر میدیم تا کوکیِ username سمت سرور را ذخیره کنیم :

def login(request):
   username = 'not logged in'
   
   if request.method == 'POST':
      MyLoginForm = LoginForm(request.POST)
      
      if MyLoginForm.is_valid():
         username = MyLoginForm.cleaned_data['username']
         request.session['username'] = username
      else:
         MyLoginForm = LoginForm()
			
   return render(request, 'loggedin.html', {"username" : username}

سپس برای فرمِ login (جایی که در صورتی که کوکی تعریف شده باشه، فرم نمایش داده نمی شه) viewیِ formView  را ایجاد می کنیم –

def formView(request):
   if request.session.has_key('username'):
      username = request.session['username']
      return render(request, 'loggedin.html', {"username" : username})
   else:
      return render(request, 'login.html', {})

اکنون برای تغییر 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'))

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

setting up sessions

و به صفحه ی زیر هدایت خواهید شد –

sessions redirected page

حالا اگه بخواین دوباره به /myapp/connection برین، مستقیماً به صفحه ی دوم هدایت میشین.

در ادامه یک viewیِ logout ساده ایجاد می کنیم که کوکی را پاک می کنه.

def logout(request):
   try:
      del request.session['username']
   except:
      pass
   return HttpResponse("<strong>You are logged out.</strong>")

و این view را به logout URL در myapp/url.py لینک می کنیم.

url(r'^logout/', 'logout', name = 'logout'),

حالا اگه به /myapp/logout برین صفحه ای بصورت زیر خواهید دید –

logged out page

اگه دوباره به /myapp/connection برین، فرمِ login (صفحه ی 1) به شما نمایش داده خواهد شد.

برخی از اعمال دیگری که می توانید با استفاده از Sessionها انجام بدین

تا این جا نحوه ی ذخیره و دسترسی به session را به شما آموزش دادیم، ولی بهتره بدانین که خصیصه ی (attribute) session مربوط به درخواست، اعمال کارآمد دیگه ای هم داره، مثل –

  • set_expiry (value) – برای تنظیم زمان انقضا استفاده می شود.
  • get_expiry_age() - عدد ثانیه ی مربوط به انقضایِ session را برمی گرداند.
  • get_expiry_date() – تاریخ انقضایِ session را برمی گرداند.
  • clear_expired() – sessionهای منقضی شده را از محل ذخیره ی sessionها حذف می کنه.
  • get_expire_at_browser_close() – بسته به این که هنگام بسته شدن مرورگرِ کاربر، کوکی هایِ session منقضی شده باشن یا نه، مقدار True یا False را برمی گرداند.

مبحث آموزشی

آموزش Django

Learn Django

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

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

تبلیغات

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

https://telegram.me/softskill_ir

آخرین مقالات

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

خبـرنــامه

Newsletters

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