SORU
2 Ocak 2010, CUMARTESİ


Django: kullanıcı oturum açtığında sinyal?

Django uygulamamı, bir kullanıcı oturum açtığında birkaç periyodik olarak arka planda çalışan işleri başlatmak ve kullanıcı kapattığında onları kaçmayı bırakmalıyım, zarif bir yol arıyorum

  1. oturum açma/oturum kapatma kullanıcı haberdar olun
  2. giriş durum . sorgu kullanıcı

Benim bakış açıma göre, ideal bir çözüm olurdu

  1. bir sinyal django.contrib.auth.views.login ... views.logout Her tarafından gönderildi
  2. bir yöntem django.contrib.auth.models.User.is_logged_in(), ... User.is_active() ... User.is_authenticated() benzer

Django 1.1.1 o yok ve kaynak yama (zaten yapmak nasıl emin değilim) eklemek için tereddüt ediyorum.

Bir geçici çözüm, ben ekledi is_logged_in boolean alanıyla İlgili modeli varsayılan olarak temizlenmiş, ilk kez kullanıcı hits açılış sayfası (tarafından tanımlanan LOGIN_REDIRECT_URL = '/') ve sorgulanır sonraki istekleri. Kaynaklanıyor ve bu amaç için yerleşik Kullanıcı modeli sadece özelleştirmek zorunda kalmayayım İlgili için ekledi.

Bu çözüm sevmiyorum. Eğer kullanıcı explicitely tık çık düğmesini, ben açık bir bayrak, ama çoğu zaman, kullanıcılar sadece terk sayfası veya tarayıcıyı kapatın; takas bayrağı bu durumlarda değil, yalındır. Ayrıca (veri model netlik kusur arayan, ama oldukça), is_logged_in Kullanıcı modeli İlgili, ama ait değil.

Herkes alternatif yaklaşımlar var mı ?

CEVAP
24 Mayıs 2011, Salı


Böyle bir sinyal (models.py mayın koymak) kullanabilirsiniz

  from django.contrib.auth.signals import user_logged_in


  def do_stuff(sender, user, request, **kwargs):
      whatever...

  user_logged_in.connect(do_stuff)

Django docs bakın: https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals http://docs.djangoproject.com/en/dev/topics/signals/ burada

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • K-391

    K-391

    23 EKİM 2012
  • modica89

    modica89

    24 HAZİRAN 2007