Esta es la estructura de mi proyecto.

project
    app
    login
    manage.py

Después de un inicio de sesión exitoso, quiero que mi usuario sea redirigido a localhost:8000/app pero actualmente redirigirá a http://localhost.com:8000/accounts/login/?next=/ porque configuré mi vista de inicio de sesión como

def login_view(request):
    if request.POST and form.is_valid():
        user = form.login(request)
        if user:
            login(request, user)
            return render_to_response('app/home.html',RequestContext)
        else:
            return HttpResponse('disabled account')
    return render_to_response('login.html', form ,RequestContext)

No puedo usar HttpResponseRedirect(reverse('app.views.dashboard')) porque la vista del tablero no sale en el mismo inicio de sesión views.py

Si importo como

from app import views as app_dashboard o from app import dashboard

Me estoy poniendo debajo del error

Invierta para 'app.views.dashboard' con argumentos '()' y argumentos de palabras clave '{}' no encontrados. 0 patrón (s) probado (s): []

Nota final, a continuación se muestra mi URL de inicio de sesión actualmente

<a href="{% url "django.contrib.auth.views.login" %}?next={{request.path}}" id="signIn">Sign in</a>

Agregado:

App / urls.py

urlpatterns = patterns('app.views',
    (r'^$', 'dashboard_view'),

Proyecto / urls.py

url(r"^", include("app.urls",)),
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page' : '/accounts/login'}),
0
user3895077 5 sep. 2014 a las 13:55

2 respuestas

La mejor respuesta

Primer punto: use URL con nombre, cf https: // docs.djangoproject.com/en/1.6/topics/http/urls/#naming-url-patterns: esto debería resolver su problema reverse.

Segundo punto: muestra el código para su propia vista de inicio de sesión, pero su url.py y el extracto de la plantilla se refieren a django.contrib.auth.views.login. Además, especifique un parámetro next en la URL de su plantilla, por lo que django.contrib.auth.views.login lo redireccionará allí, como se explica en el FineManual (tm):

Si se llama a través de POST con credenciales enviadas por el usuario, intenta iniciar sesión en el usuario. Si el inicio de sesión es exitoso, la vista redirige a la URL especificada a continuación. (...)

Finalmente: no necesita escribir su propia vista si todo lo que quiere es forzar la vista de inicio de sesión para que siempre redirija a una misma URL:

(...) Si no se proporciona el siguiente, se redirige a settings.LOGIN_REDIRECT_URL (que por defecto es / accounts / profile /). Si el inicio de sesión no es exitoso, vuelve a mostrar el formulario de inicio de sesión.

IOW:

  1. use URL con nombre en todas partes (nombre sus propias URL y use nombres de URL cuando llame a reverse o al {% url %} templatetag)
  2. Deshazte de la next=... en tus plantillas
  3. configura tu settings.LOGIN_REDIRECT_URL en la URL de tu tablero.
0
bruno desthuilliers 5 sep. 2014 a las 13:05
def login_view(request):
    if request.POST and form.is_valid():
        user = form.login(request)
        if user:
            login(request, user)
            return redirect('/app/')
        else:
            return HttpResponse('disabled account')
    return render_to_response('login.html', form ,RequestContext)

Cambie la respuesta de procesamiento para redirigir, proporcione la URL requerida para redirigir

-1
Deeban Babu 5 sep. 2014 a las 12:41