mozilla / django-browserid

Django application for adding BrowserID support.
Mozilla Public License 2.0
179 stars 80 forks source link

Namespaced url patterns don't work #167

Closed peterbe closed 10 years ago

peterbe commented 11 years ago

In my settings I have:

LOGIN_REDIRECT_URL = 'main:home'
LOGIN_REDIRECT_URL_FAILURE = 'main:home'

I'm assuming that's what it barfs on. I know that reverse('main:home') will work.

Traceback (most recent call last):
  File "/usr/local/Cellar/python2.6/2.6.6/lib/python2.6/wsgiref/handlers.py", line 93, in run
    self.result = application(self.environ, self.start_response)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/contrib/staticfiles/handlers.py", line 67, in __call__
    return self.application(environ, start_response)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/core/handlers/wsgi.py", line 241, in __call__
    response = self.get_response(request)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/core/handlers/base.py", line 179, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/views/generic/base.py", line 48, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor-local/lib/python/django_browserid/views.py", line 138, in dispatch
    return super(Verify, self).dispatch(request, *args, **kwargs)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/views/generic/base.py", line 69, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/views/generic/edit.py", line 138, in post
    return self.form_valid(form)
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor-local/lib/python/django_browserid/views.py", line 113, in form_valid
    return self.login_success()
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor-local/lib/python/django_browserid/views.py", line 63, in login_success
    return HttpResponseRedirect(redirect_to or self.get_success_url())
  File "/Users/peterbe/dev/MOZILLA/PEEKABOO/peekaboo/vendor/lib/python/django/http/__init__.py", line 749, in __init__
    raise SuspiciousOperation("Unsafe redirect to URL with scheme '%s'" % parsed.scheme)
SuspiciousOperation: Unsafe redirect to URL with scheme 'main'
Osmose commented 10 years ago

Thinking on this a bit more, and now that we support Django 1.4.8 as the minimum, I don't think we should bother trying to auto-reverse these settings. If you want to use a named URL pattern, just use reverse_lazy.

willkg commented 10 years ago

But that means you have to import reverse_lazy into settings, right? That seems like a bad idea.

Osmose commented 10 years ago

But that means you have to import reverse_lazy into settings, right? That seems like a bad idea.

Why? I've done it many times before and it works fine. Seems like a perfect use case for it, actually. Lets you use reverse in a file you normally wouldn't.

willkg commented 10 years ago

Funky. I try to avoid importing anything from django in my settings files so as not to create import problems. But if it works, I guess it works.

peterbe commented 10 years ago

I agree with both of you. Any import in the settings file feels like a failure except this one case.

mvasilkov commented 10 years ago

Contrary to popular opinion, there's nothing inherently bad in importing utilities into settings. Sure, not models or anything like that, but small stuff for url/path mangling etc. is totally fine.

One good example of this is dj-database-url.