Проблема такая - у меня есть контроллер, отвечающий за логин, он обрабатывает два запроса - GET - запрос загружает html и отображается, при POST-запросе проводится аутентификация и редирект на стартовую страницу. Но, при POST-запросе аутентификация проводится, переход по url проводится, а рендер HTML - нет! Что смутило - при GET-запросе по url, на который перенаправляется, выдает 200 ОК, а url в браузере не поменялся! (Код - наброски, прошу не ругать).
Login
def login(request):
if request.method == 'GET':
print(request.META['HTTP_ACCEPT'])
return render(request, 'polls/login.html')
if request.method == 'POST':
print(request.META['HTTP_ACCEPT'])
loginJson = request.body.decode("utf-8")
loginData = json.loads(loginJson)
username = loginData['username']
password = loginData['password']
calledUser = Client.objects.get(name=username)
if calledUser is None:
t = loader.get_template('polls/fail.html')
reqContext = RequestContext(request, {
'username': username,
})
return HttpResponse(t.render(reqContext))
else:
if calledUser.password == password:
return redirect('http://localhost:8000/polls/login/startpage/')
# return render(request, 'polls/startpage.html', content_type="text/html")
else:
return redirect('http://localhost:8000/polls/login/fail/')
Контроллер, отвечающий за url '/polls/login/startpage'
def startPage(request):
if request.method == 'GET':
print(request.META['HTTP_ACCEPT'])
return render(request, 'polls/startpage.html')
urls.py
urlpatterns = [
# ...
url(r'^login/$', views.login, name='login'),
url(r'^login/startpage/$', views.startPage, name='start'),
url(r'^login/fail/$', views.failPage, name='fail'),
# ...
]
Лог в консоли
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
[05/Nov/2016 07:25:17] "GET /polls/login/ HTTP/1.1" 200 1141
[05/Nov/2016 07:25:17] "GET /static/login.css HTTP/1.1" 304 0
[05/Nov/2016 07:25:17] "GET /static/login.js HTTP/1.1" 304 0
text/html, */*; q=0.01
[05/Nov/2016 07:25:23] "POST /polls/login/ HTTP/1.1" 302 0
text/html, */*; q=0.01
[05/Nov/2016 07:25:23] "GET /polls/login/startpage/ HTTP/1.1" 200 583
Все же лаконичнее будет так.
def startPage(request):
print(request.META['HTTP_ACCEPT'])
return render(request, 'polls/startpage.html', {})
Не понимаю для чего проверять на GET? Это раз.
Попробуйте:
return redirect('start')
Это мелкие корректировки. Но основная проблема в логах не прослеживается.
Единственное, если запрос отправляете скриптом (Ajax POST) и ждете, что сервер поменяет страницу в браузере. Тогда сервер должен вашему скрипту отправить ответ об аутентификации, а уже js перенаправит на нужную страницу.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Привет всемВозникла проблема с реализацией эффекта при верстке страницы