Не рендерится html после редиректа (Django)

250
26 ноября 2016, 19:44

Проблема такая - у меня есть контроллер, отвечающий за логин, он обрабатывает два запроса - 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
Answer 1

Все же лаконичнее будет так.

def startPage(request):
    print(request.META['HTTP_ACCEPT'])
    return render(request, 'polls/startpage.html', {})

Не понимаю для чего проверять на GET? Это раз.

Попробуйте:

return redirect('start')

Это мелкие корректировки. Но основная проблема в логах не прослеживается.

Единственное, если запрос отправляете скриптом (Ajax POST) и ждете, что сервер поменяет страницу в браузере. Тогда сервер должен вашему скрипту отправить ответ об аутентификации, а уже js перенаправит на нужную страницу.

READ ALSO
Gulp не компилит sass в css

Gulp не компилит sass в css

Здравствуйте, коллеги!

331
“Стирающий” position: fixed блок HTML

“Стирающий” position: fixed блок HTML

Привет всемВозникла проблема с реализацией эффекта при верстке страницы

313