Django - Penanganan Cookies
Terkadang Anda mungkin ingin menyimpan beberapa data per pengunjung situs sesuai dengan persyaratan aplikasi web Anda. Ingatlah selalu, bahwa cookie disimpan di sisi klien dan bergantung pada tingkat keamanan browser klien Anda, pengaturan cookie terkadang dapat berfungsi dan terkadang tidak.
Untuk mengilustrasikan penanganan kuki di Django, mari buat sistem menggunakan sistem masuk yang kita buat sebelumnya. Sistem akan membuat Anda tetap masuk selama X menit, dan setelah itu, Anda akan keluar dari aplikasi.
Untuk ini, Anda perlu menyiapkan dua cookie, last_connection dan nama pengguna.
Pertama-tama, mari ubah tampilan login untuk menyimpan nama pengguna dan 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
Seperti yang terlihat pada tampilan di atas, pengaturan cookie dilakukan oleh set_cookie metode memanggil respons bukan permintaan, dan juga perhatikan bahwa semua nilai cookie dikembalikan sebagai string.
Sekarang mari buat formView untuk formulir login, di mana kita tidak akan menampilkan formulir jika cookie disetel dan tidak lebih dari 10 detik -
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', {})
Seperti yang Anda lihat pada formView di atas, mengakses cookie yang Anda setel, dilakukan melalui atribut COOKIES (dict) dari permintaan tersebut.
Sekarang mari kita ubah file url.py untuk mengubah URL sehingga berpasangan dengan tampilan baru kita -
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'))
Saat mengakses / myapp / koneksi, Anda akan mendapatkan halaman berikut -
Dan Anda akan diarahkan ke layar berikut saat mengirimkan -
Sekarang, jika Anda mencoba mengakses / myapp / koneksi lagi dalam rentang 10 detik, Anda akan diarahkan ke layar kedua secara langsung. Dan jika Anda mengakses / myapp / koneksi lagi dari kisaran ini, Anda akan mendapatkan formulir login (layar 1).