Django: HttpResponseRedirect não está funcionando
Eu sou novo em Python / Django e programação geral. Preciso de ajuda com o HttpResponseRedirect, pois ele não está funcionando na minha visualização de logon. Ele funciona no meu arquivo principal do Views, mas não da maneira que eu quero.
Em vez de redirecionar para a página desejada ('/'), só vejo isso na mesma página:
Tipo de Conteúdo: text / html; charset = utf-8 Localização: /
O usuário realmente está logado, mas permanece na mesma página. Portanto, se eu for manualmente para a página desejada, verei que estou logado.
Aqui estão as partes relevantes do código. Estou usando meus próprios pontos de vista em todos os lugares. Eu gostaria desta maneira para praticar e entender melhor.
Urls.py
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
from backend import settings
admin.autodiscover()
urlpatterns = patterns('',
url(r'^login/', 'backend.views.login', name = 'login'),
url(r'^logout/', 'backend.views.logout', name = 'logout'),
url(r'^Views.py
from dashboard.dashviews import left, right, topright
from authentication.authviews import LoginView, LogoutView
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')
def dash(request):
return render(request, 'dash_template.html',
{'left': left.dash_left(request),
'right': right.dash_right(),
'topright': topright.top_right(request)})
def login(request):
if not request.user.is_authenticated():
return render(request, 'login.html', {'login': LoginView.login_view(request)})
else:
return HttpResponseRedirect('/')
def logout(request):
return render(request, 'logout.html', {'logout': LogoutView.logout_view(request)}) and HttpResponseRedirect('/login/')
LoginView.py
from django.contrib import auth
from django.http import HttpResponseRedirect
def login_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
# Correct password, and the user is marked "active"
auth.login(request, user)
# Redirect to dashboard
return HttpResponseRedirect('/')
else:
# Show a message
return 'Please enter your username and password below.'
login.html - formulário simples
<center>
<p>{{ login }}</p>
{% if form.errors %}
<p class="error">Sorry, that's not a valid username or password</p>
{% endif %}
<form action="./" method="post">
<table border="0">
<tr>
<td>
<label for="username">Username:</label>
</td>
<td>
<input type="text" name="username" value="" id="username">
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" value="" id="password">
</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="/" />
{% csrf_token %}
</form>
</center>
Eu segui o tutorial do livro do Django sobre isso e, de acordo com isso, tudo deve funcionar muito bem. Como você pode ver, também tentei usar o campo "próximo" oculto no meu formulário, que também não funciona. Qualquer ajuda seria apreciada. Eu me pergunto o que estou perdendo aqui. Obrigado!
, 'backend.views.dash', name = 'dash'),
url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
Views.py
from dashboard.dashviews import left, right, topright
from authentication.authviews import LoginView, LogoutView
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')
def dash(request):
return render(request, 'dash_template.html',
{'left': left.dash_left(request),
'right': right.dash_right(),
'topright': topright.top_right(request)})
def login(request):
if not request.user.is_authenticated():
return render(request, 'login.html', {'login': LoginView.login_view(request)})
else:
return HttpResponseRedirect('/')
def logout(request):
return render(request, 'logout.html', {'logout': LogoutView.logout_view(request)}) and HttpResponseRedirect('/login/')
LoginView.py
from django.contrib import auth
from django.http import HttpResponseRedirect
def login_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
# Correct password, and the user is marked "active"
auth.login(request, user)
# Redirect to dashboard
return HttpResponseRedirect('/')
else:
# Show a message
return 'Please enter your username and password below.'
login.html - formulário simples
<center>
<p>{{ login }}</p>
{% if form.errors %}
<p class="error">Sorry, that's not a valid username or password</p>
{% endif %}
<form action="./" method="post">
<table border="0">
<tr>
<td>
<label for="username">Username:</label>
</td>
<td>
<input type="text" name="username" value="" id="username">
</td>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" name="password" value="" id="password">
</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="/" />
{% csrf_token %}
</form>
</center>
Eu segui o tutorial do livro do Django sobre isso e, de acordo com isso, tudo deve funcionar muito bem. Como você pode ver, também tentei usar o campo "próximo" oculto no meu formulário, que também não funciona. Qualquer ajuda seria apreciada. Eu me pergunto o que estou perdendo aqui. Obrigado!