Django에서 Form submit을 하고 그 submit을 처리한다음 view단에서 r

 
Juram Park

Django에서 Form submit을 하고 그 submit을 처리한다음 view단에서 redirect를 한 후에 기존에 있던 bind된 event들이 작동을 안하는것같습니다.. view에서 redirect를 한것이 페이지를 깔끔하게 새로 그리는게 아닌것 같은데.. 혹시 이런문제 겪으신분이 계실까요..?

  • Chinseok Lee

    redirect 를 하면, 웹페이지가 새로 그려지는 것이 맞습니다.

    이 어떤걸 말씀하시는 것인지 잘 모르겠습니다.

    데이터베이스에 저장이 안된다는 말씀이신가요?
    혹은 모델의 시그널 (post_save, pre_save 등) 이 동작을 안한다는 말씀이신가요?

    Juram Park

    Chinseok Lee 답변 감사드립니다. 현재 mobile환경이구요 Login페이지에서 Form을 submit하면 로그인을 처리하고, 올바른 요청이 아니면 다시 로그인 페이지로 이동하게 하고싶습니다. 그래서 login을 처리하는 function( form의 action과 일치)에서 redirect를 했는데 로그인페이지가 위, 아래 2개가 그려지는 현상이 벌어집니다.. 사실 개발자도구로 코드를 보면 2개가 이어져있는데 화면에 보이는건 하나만 보이긴 합니다..

    Chinseok Lee

    폼이 invalid 하다면, redirection 없이 form 객체를 그대로 렌더링하시면 됩니다. 그때 invalid 한 필드정보가 해당 form 객체에 담겨있습니다. redirection 은 form 이 valid 할때에만 하면 됩니다.

    로그인 폼이 2개 그려지는 것은 템플릿 설계를 잘못하신 것이 아닌지 추측되네요.

    form 은 대강 다음과 같은 구조를 가집니다.

    if request.method == ‘POST’:
    … form = LoginForm(request.POST)
    … if form.is_valid():
    ……. # 로그인 세션/쿠키 처리
    ……. return redirect(‘url after login’)
    else:
    … form = LoginForm()

    return render(request, ‘form.html’, {‘form’: form})

    그리고 참고로 django 에서는 auth view 를 django.contrib.auth 를 통해 제공하고 있습니다. 이를 이용하면 뷰 구현은 따로 안하셔도 되고, 템플릿만 작성하셔도 됩니다.
    https://docs.djangoproject.com/en/dev/topics/auth/default/

Advertisements