SORU
23 Kasım 2008, Pazar


Django kimlik ve giriş gerektiren URL Ajax

Django kodlu web sitem için Ajax-kibarlığın bazı şeyler eklemek istiyorum.

Django Şifremi, django.contrib.auth.decorators @login_required dekoratör kimlik doğrulaması gerektiren işaretlemek için kullanıyorum. Kimliği doğrulanmış bir kullanıcı onu yönlendirmek için tıkladığında varsayılan davranış sayfasına giriş ve hedef sayfa geçirin.

Ne gördüm bazı siteler ve gerçekten çok seviliyor, o zaman kullanıcı bir bağlantıyı tıklama önde gelen bir yer kısıtlı oturum-tek kullanıcılar yerine yönlendirildi almak için bir oturum açma sayfası, O/O alır bir popup pencere () JavaScript) soruyor ona giriş yapın ya da kayıt olun. Yönlendirme parçası, bir kullanıcı "geri eğer gerçekten web sitesi zaman kayıt ziyan edecek kadar sevmiyor o verirse." tuşunu kullanın gerek yok

Yani, soru şudur: nasıl "yasak" JavaScript onclick olay ve görüntü işleyebilir bir bomba? lütfen oturum otomatik olarak bazı bağlantılar işaretleme görevini yaparsın sen

CEVAP
7 ŞUBAT 2009, CUMARTESİ


Aynı sorunla karşı karşıyayım, ve senin gibi, diğer görüşleri var, aynı şekilde kimlik doğrulama işlemek için Django ajax bir görünüm etrafında sarmak için basit bir dekoratör istiyorum. Bana umut verici görünüyor bir yaklaşım yanıt olarak belirli bir değeri arar JavaScript ile birlikte böyle bir dekoratör kullanmaktır.

Buradailkdekoratör taslak revize:

from functools import wraps

def ajax_login_required(view_func):
    @wraps(view_func)
    def wrapper(request, *args, **kwargs):
        if request.user.is_authenticated():
            return view_func(request, *args, **kwargs)
        json = simplejson.dumps({ 'not_authenticated': True })
        return HttpResponse(json, mimetype='application/json')
    return wrapper

İşte görünümü:

@ajax_login_required
def ajax_update_module(request, module_slug, action):
    # Etc ...
    return HttpResponse(json, mimetype='application/json')

Ve burada JavaScript () jQuery

$.post('/restricted-url/', data, function(json) {
    if (json.not_authenticated) {
        alert('Not authorized.');  // Or something in a message DIV
        return;
    }
    // Etc ...
});

EDİT: Önerilen functools.wraps, kullanmaya çalıştık. Aslında çalışma kodu, Olası hataların sakının bu dekoratör kullandım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012
  • ThePointblank

    ThePointblan

    18 Aralık 2006