2011-04-08 31 views
7

Diğer dillerde, örneğin bir çerezde sona erme tarihini güncellemek çok kolaydır, ancak hayatımın Django'da nasıl yapılacağını anlayamıyorum!Django'da bir çerez nasıl güncellenir

Yeni bir tanımlama bilgisi ayarlamak yerine son kullanma tarihini güncellemenin nedeni, her sayfada bir veritabanı araması yapmak zorunda kalmam.

DÜZENLEME: tüm cevaplar için teşekkürler ama ben başarmak istediğim şey hakkında bazı karışıklıklar gibi görünüyor, bu yüzden daha doğrusu çalışacağım: çerez BAŞLARKEN soru değil AYAR veya. Bilmek istediğim zaten ayarlanmış bir çerez UPDATE nasıl yapılır. Yanlış anlaşılma için özür dilerim!

+0

Aslında bunu yapmanın bir yolunu bulamadım. Bunu yapmanın bir yolu olacağını düşündüm. 1. Kurabayı al 2. Son kullanma tarihini değiştirin, bu kadar basit. Çalışmayan sözde kod: c = request.COOKIES ['mycookie'] c.expire = datetime.datetime.now() + datetime.timedelta (gün = 30) – mistalaba

cevap

10

Bir noktada, yeni bir kullanıcı için, çerezi ayarlamalısınız. Çerezin sona erme süresi genellikle kullanıcı başına bir durumdur. Django, aşağıdaki kodu ile çerez yaş ayarlayabilirsiniz:

response = redirect('somewhere') # replace redirect with HttpResponse or render 
response.set_cookie('cookie_name', 'cookie_value', max_age=1000) 

üzerindeki çerez bir kullanıcının tarayıcısında 1000'ler sonrası sona erecek.

Ayrıca bir son kullanma tarihi belirtebileceğiniz bir expires özniteliği vardır.

Referans: Django kaynak kodu itibaren https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse.set_cookie

DÜZENLEME

, aşağıdakileri deneyin:

response = redirect('somewhere') # replace redirect with HttpResponse or render 
response.cookies['cookie_name']['expires'] = datetime.today() + timedelta(days=1) 

bugünden yukarıdaki 1 gün Geçerlilik.

+0

Zaten cookie ayarlamak, soru zaten ayarlanmış bir çerez nasıl güncellenir? – mistalaba

+0

Düzenlenmiş yanıtınızı denedim, ancak standart tanımlama bilgileriyle bunu yapamayacağınız anlaşılıyor (daha önce bu çerezi ayarlamış olsanız bile KeyError 'cookie_name' oluyor).Bunu inceledikten sonra django.http.SimpleCookie() kullanırsanız işe yarayabilir gibi görünüyor. Daha fazla araştıracağım. – mistalaba

2

Erişme çerezleri: request.COOKIES[..]

Ayar çerezleri: response.set_cookie() burada

Daha Fazla Bilgi: django book: Sessions...

+0

Erişilen bir çerezi değiştirmek mümkün mü? Bir la request.COOKIES ['mycookie']. expire = vb? – mistalaba

+0

Evet bakın http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/ süresi dolmak için değişiklik yapabilirsiniz – iddqd

İlgili konular