WSGI çevre parametresi vs $ _SERVER

3 Cevap php

I'm designing a site. It is in a very early stage, and I have to make a decision whether or not to use a SingleSignOn service provided by the server. (it's a campus site, and more and more sites are using SSO here, so generally it's a good idea). The target platform is most probably going to be django via mod_wsgi. However, any documentation provided with this service features php code. This method heavily relies on using custom $_SERVER['HTTPsomething'] variables. Unfortunately, right now I don't have access to this environment.

(Nasıl) django Bu özel değişkenler erişebilir? WSGI belgelerine göre, çevre değişken mümkün değişkenler gibi birçok içermelidir. Ben onları erişebilirsiniz emin olabilir miyim?

3 Cevap

Django, sunucu ortam değişkenleri request nesne üzerinde META niteliğin sözlük üyeleri olarak verilmektedir - böylece görünümünde, her zaman {[(2)] kullanarak erişebilirsiniz } burada foo değişken adıdır.

Ne olduğunu görmek için kolay bir yol assert False bir hata tetiklemek için içeren bir görünüm oluşturmak için. Sürece çalışıyor konum olarak DEBUG=True, sen nitelikleri tüm request tam bir listesi de dahil olmak üzere, sunucu durumu hakkında birçok bilgi içeren güzel bir hata sayfası görürsünüz.

Django onlara bir şey yok önce, ham WSGI ortamında geçirilen değişkenler kümesini belirlemek için, Django şeyler yerine WSGI komut dosyasında aşağıdaki kodu koyun.

import StringIO

def application(environ, start_response):
    headers = []
    headers.append(('Content-type', 'text/plain'))

    start_response('200 OK', headers)

    input = environ['wsgi.input']
    output = StringIO.StringIO()

    keys = environ.keys()
    keys.sort()
    for key in keys:
        print >> output, '%s: %s' % (key, repr(environ[key]))
    print >> output

    length = int(environ.get('CONTENT_LENGTH', '0'))
    output.write(input.read(length))

    return [output.getvalue()]

Bu tarayıcı anahtar / değer çiftleri kümesini geri gösterecektir.

SSO mekanizması nasıl çalıştığını bulmak önemlidir. Bu mantıklı bir şey yoksa, muhtemelen bu REMOTE_USER ve muhtemelen AUTH_TYPE değişkenlerini ayarlar bulacaksınız. REMOTE_USER ayarlı ise bu değişken adlı kullanıcı Apache bazı yüksek düzey doğrulama mekanizması tarafından doğrulanmış olduğunu bir göstergesidir. Bu değişkenler normal olarak HTTP Basic ve Digest kimlik doğrulaması için ayarlanmış olurdu, ama mümkün olduğunca çok sayıda sistemleri ile çalışmak için, bir SSO mekanizması, aynı zamanda onları kullanmalısınız.

Onlar ayarlanır, sonra da tarif Django özelliği vardır:

http://docs.djangoproject.com/en/dev/howto/auth-remote-user/

Daha sonra Django daha yüksek bir seviyede yapılması kimlik kabul etmek için kullanılabilecek.

SSO mekanizması REMOTE_USER kullanabilirsiniz, ancak bunun yerine özel başlıkları kullanan yok bile, Django sonra yararlanabilirler uygun REMOTE_USER değere herhangi bir özel başlıkları çevirmek için tüm Django uygulaması etrafında özel bir WSGI kapsayıcı kullanabilir.

Eh, $ _SERVER PHP. Siz de WSGI yoluyla aynı değişkenleri erişmek için, ancak SSO tam olarak nasıl çalıştığını anlamaya gerek emin olmak mümkün olması muhtemeldir, bu yüzden bu değişkenleri (muhtemelen Apache) oluşturur ve bunları erişebilirsiniz olduğunu biliyorum.

Yoksa, kendinizi erişim almak ve bunu deneyebilirsiniz. :)