ozgurv yazmış:
> Mantık çok basit aslında. Middleware denen classlar kullanıcıdan gelen
> bir HTTP isteğinin django tarafından alınıp, işlenip, kullanıcıya geri
> gönderilmesi aşamalarını manipüle etmenizi sağlar. Detaylara
> inmeyeceğim.
> Link'teki örnekten gideceğim. Neydi örneğimiz:
>
> from django.contrib.auth.views import login
> from django.http import HttpResponseRedirect
>
> class SiteLogin:
> def process_request(self, request):
> if request.path != "/accounts/login" and request.user.is_anonymous():
> if request.POST:
> return login(request)
> else:
> return HttpResponseRedirect('/accounts/login/?next=%s'
> % request.path)
>
>
> Şimdi burada arkadaş bir middleware'de olması gereken metod olan
> "process_request" metodunu override etmiş. Yani aslında django
> kullanıcıdan gelen isteği execute edip herhangi bir cevap üretmemiş.
>
> PS: Cevap üretme işlemi "process_view" metodunda, cevap'ın
> gönderilmesi de "process_response" metodunda manipüle edilebilir.
>
> Bu arkadaşın yazdığı koda göre web uygulamasına istek yapan bir
> kullanıcının başına şunlar gelecek:
>
> Kullanıcı siteye ilk kez girdiğinde eğer hiç login olmamış ise direk
> olarak "/accounts/login/" url'ine gönderilecek. Geldiği sayfada eğer
> login bilgilerini eksiksiz girerse login olacak. Login olmuşsa bir
> dahaki HTTP isteklerinde her zaman request.user.is_anonymous() = False
> olacağı için bu kod parçaşı çalıştırılmayacak. Aynısı şu şekilde de
> yazılır. Bence daha anlaşılır:
>
> /accounts/login/ aslında settings.py'de "LOGIN_URL" olarak
> tanımlanmalıdır. eğer tanımlanmazsa django direk olarak kullanıcıların
> login olma sayfasını "/accounts/login/" olarak kabul eder. Kullanıcıyı
> oraya yönlendirir.
>
> Ben settings.py dosyasında LOGIN_URL = "/user/login/" olarak
> tanımlayacağım. LOGIN_URL ne demek şuraya bakabilirsiniz.
> http://docs.djangoproject.com/en/dev/ref/settings/#login-url
>
> from django.contrib.auth.views import login
> from django.http import HttpResponseRedirect
> from django.conf import settings
>
> class SiteLogin:
> def process_request(self, request):
> if request.path != settings.LOGIN_URL and request.user.is_anonymous():
> return HttpResponseRedirect('%s?next=%s' %
> (settings.LOGIN_URL, request.path))
>
> Bu kadar. Bu ne yapar? Anonim olan bütün kullanıcıları , /user/login/
> url'ine yönlendirir. O url'de de django'nun built-in login view'ini
> çalıştırmanız gerekmektedir.
> Şöyleki:
>
> (r'^user/login/$', 'django.contrib.auth.views.login')
>
> Yada kendinizde bir tane view yazabilirsiniz. Ama gerek yok.
>
> 2010/1/25 "H.İbrahim YILMAZ" <[email protected]>:
>
>> ozgurv yazmış:
>>
>>> (r'^accounts/login/$', 'deneme.middleware.SiteLogin') yerine şöyle
>>> yapmalısın:
>>>
>>> (r'^accounts/login/$', 'django.contrib.auth.views.login'),
>>>
>>> Ayrıca arkadaş şöyle bir şey yazmı$.
>>>
>>> ***************
>>> Then put 'myproject.middleware.SiteLogin' in your MIDDLEWARE_CLASSES
>>> in settings.py (replace myproject with your project name) and you're
>>> done!
>>> ***************
>>>
>>> Bunu yaptın mı? Ayrıca burada eksik söylenmiş. Suna da dikkat
>>> etmelisin. Middleware sırası önemlidir. Burada arkadaşın yazdığı kodda
>>> exception almaman için 'myproject.middleware.SiteLogin' middleware
>>> classını
>>> "django.contrib.auth.middleware.AuthenticationMiddleware" classından
>>> sonra yazman gerekir. Yani örneğin şöyle:
>>>
>>> MIDDLEWARE_CLASSES = (
>>> "django.middleware.gzip.GZipMiddleware",
>>> "django.contrib.sessions.middleware.SessionMiddleware",
>>> "django.middleware.locale.LocaleMiddleware",
>>> "django.middleware.transaction.TransactionMiddleware",
>>> "django.contrib.auth.middleware.AuthenticationMiddleware",
>>> "django.middleware.common.CommonMiddleware",
>>> "myproject.middleware.SiteLogin" # en sonra koyman mantıklı burada
>>> )
>>> gibi ...
>>>
>>> 4) Tüm sitenin login olduktan sonra görülmesi için bundan daha basit
>>> anlaşılır bir yapı var.
>>>
>>>
>>> 2010/1/25 ozgurv <[email protected]>:
>>>
>>>
>>>> Exception sayfasında gelen tüm hatayı kopyalar mısın?
>>>>
>>>> 2010/1/25 "H.İbrahim YILMAZ" <[email protected]>:
>>>>
>>>>
>>>>> Merhaba,
>>>>> http://superjared.com/entry/requiring-login-entire-django-powered-site/
>>>>> tüm sitenin sadece login olarak girilmesi amacıya yukardaki sitedeki
>>>>> söyleneni yaptım. Fakat hangi url'e girersem gireyim aşağıdaki hatayı
>>>>> alıyorum:
>>>>> TypeError at /accounts/login/ this constructor takes no arguments
>>>>>
>>>>> Anlamadığım bir kaç soru var bu konuyla alakalı.
>>>>> 1)Djangonun default login path'i kullanıldığında, kök dizin altına
>>>>> /accounts/login/index.html gibi bir klasör/dosya mı oluşturmak
>>>>> gerekiyor? yoksa /templates/accounts/login/index.html şeklinde mi? (her
>>>>> iksinde de sonuç aynı maalesef :( )
>>>>> 2)Yoksa django endisi otomatik bir login ekranı mı sunuyor?
>>>>> 3)Yukardaki adresteki yapının url tanımlaması nasıl yapacağız? Ben şu
>>>>> şekilde yaptım :
>>>>> (r'^accounts/login/$', 'deneme.middleware.SiteLogin'),
>>>>> 4)Tüm sitenin login olduktran sonra görülmesi için. Bundan daha basit
>>>>> anlaşılır bir yapı var mı?
>>>>> Not: Djangobook'u ve djangonun kendi sitesindeki belgelei okudum hiç bir
>>>>> şey anlamadım (bu konuyla alakalı) desem yeridir. Şu konuyu da sizlerin
>>>>> yardımıyla anlasam sanırım büyük bir olayı atlatmış olacağım.
>>>>> Saygılarımla.
>>>>>
>>>>> --
>>>>> H.İbrahim YILMAZ
>>>>> Sales & Technical Manager
>>>>> Marmara Bilişim
>>>>> Hürriyet Sokak 6/A YALOVA
>>>>> Tel: +90 226 813 3131
>>>>> http://www.bilisimmarmara.com.tr
>>>>>
>>>>> _______________________________________________
>>>>> Linux-programlama mailing list
>>>>> [email protected]
>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>>>>
>>>>>
>>>>>
>>>> --
>>>> Özgür Vatansever
>>>>
>>>>
>>>>
>>>
>>>
>>>
>> Merhaba Özgür Bey,
>> Zaten bahsedildiği gibi yaptım. Sadece regex'te hata yapmışım. Fakat
>> benim esas sorunum, mantığı anlayamamak. Yani bu bana bir login sayfası
>> yaratacak mı? Şu anda denemem mümkün değil yarın sonucu bildireceğim.
>>
>> 4) Tüm sitenin login olduktan sonra görülmesi için bundan daha basit
>> anlaşılır bir yapı var.
>>
>> Nedir acaba? Öğrenmeyi çok isterim.
>> Saygılarımla.
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> [email protected]
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>
Çok teşekkür ederim Özgür bey. Şimdi taşlar yerine oturmaya başladı...
Şimdiye kadar aldığım en tatmin edici cevap oldu diyebilirim.
Saygılar...
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php