I'm replying to my own message because I was getting some strange behaviour and this is how I fixed it.
I would occasionally see unformatted debug_toolbar output after my "under construction" page. I could reliably reproduce this "bug" (I think it's a bug but I have no idea where) via the following: 1. make a request using a proxy that is in INTERNAL_IP, see proper internal page 2. immediately make a request using a proxy that is not in INTERNAL_IP, see construction page with debug output 3. 'touch settings.py' 4. make a request using external proxy, see only construction page, no debug output If it makes any difference I'm using wsgi and a monitor.py program that I got from a website. Anyhow, the solution was to change my middleware to: def process_response( self, request, response ): remote_addr = request.META['REMOTE_ADDR'] return remote_addr in settings.INTERNAL_IPS if not is_internal: return render_to_response( 'construction.html' ) return response ie: do a process_RESPONSE not a process_REQUEST. So there's how you do that. Anybody have any ideas about the bug of seeing the debug_toolbar output (without css/js formatting). I'll file a bug if it's a bug and not just me not knowing how to write middleware. My middleware problem? debug_toolbar problem? Django problem? Kurt On 2009-10-04, at 2:23 PM, Kurt Neufeld wrote: > > Wow, was that ever easy. Thanks for your help! > > Kurt > > For future googlers: > > settings.py: > MIDDLEWARE_CLASSES = ( > ... > 'redirector.ConstructionFilterMiddleware', > ... > ) > > redirector/__init__.py: > from django.shortcuts import render_to_response > from django.conf import settings > > class ConstructionFilterMiddleware(object): > """ > This middleware redirects all requests from clients that are > not in INTERNAL_IPS to the construction.html page > """ > > def process_request(self, request): > remote_addr = request.META['REMOTE_ADDR'] > is_internal = remote_addr in settings.INTERNAL_IPS > > if not is_internal: > return render_to_response( 'construction.html' ) > > > On 2009-10-04, at 1:19 PM, Kristaps Kūlis wrote: > >> You should and must do such things at middleware (as god intended). >> >> example: http://www.djangosnippets.org/snippets/845/ >> just return custom HttpResponse, not HttpResponseForbiden >> >> >> Kristaps Kūlis >> On Sun, Oct 4, 2009 at 8:41 PM, Kurt <kneuf...@burgundywall.com> >> wrote: >> >>> >>> >>> I think I must be doing something fundamentally wrong since this >>> seems >>> like an easy problem... >>> >>> I'm building a site, I want all ips not in INTERNAL_IPS to get an >>> "under construction" page and my internal ips to get the real site. >>> What I'm trying to do is call the application urlconf via the >>> resolve >>> function. >>> >>> The redirect to the construction page works fine. >>> >>> The resolve seems to work since the /admin/ pages work but >>> django_authopenid do not, I get strange errors like "Reverse for >>> 'user_sendpw' with arguments '()' and keyword arguments '{}' not >>> found." >>> >>> If I change settings.py:ROOT_URLCONF to be "myapp.urls" then >>> authopenid works. >>> >>> settings.py: >>> ROOT_URLCONF = 'redirector.urls' >>> >>> redirector/urls.py: >>> urlpatterns = patterns('', >>> (r'^', 'redirector.views.redirect' ), >>> ) >>> >>> redirector/views.py: >>> def redirect(request, *args, **kwargs): >>> remote_addr = request.META['REMOTE_ADDR'] >>> is_internal = remote_addr in settings.INTERNAL_IPS >>> >>> if not is_internal: >>> return render_to_response( 'construction.html' ) >>> >>> uri = request.META.get('REQUEST_URI', '/' ) >>> >>> # if we're an internal ip address then find the application >>> urlconf >>> app = settings.SETTINGS_MODULE.split( "." )[0] >>> app_urls = app + ".urls" >>> >>> # FANCY BIT IS RIGHT HERE >>> view, args, kwargs = resolve( urlparse(uri)[2], app_urls ) >>> >>> return view(request, *args, **kwargs) >>> >>> > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---