jc.jang

8강 회원가입 시 next 인자 처리하기 본문

Django/Django - 인증편

8강 회원가입 시 next 인자 처리하기

jangstory 2019. 9. 2. 17:34

주제

  • 회원가입 시 next 인자 처리하기
  • 로그인, 로그아웃 시 next 인자를 통해 이동할 페이지를 설정할 수 있다.

노트

  • next인자가 있으면 그 곳으로 이동, 없으면 profile로 이동

 

  • accounts/views.py
def signup(request):
    if request.method == "POST":
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            auth_login(request, user)
            next_url = request.GET.get('next') or 'profile'
            return redirect(next_url)
    else:
        form = SignupForm()
    return render(request, 'accounts/signup.html', {
        'form': form,
    })
  • request.GET.get('next')로 next인자의 값을 가져온다. next 인자가 없을 경우 'profile'로 설정한다.
  • django/http/request.py에 HttpRequest class를 확인하면 request에서 어떠한 정보를 가져오는지 확인할 수 있다.
  • 혹은 vscode의 디버그를 이용해 '변수'창에서 확인 가능!
  • QueryDict은 <QueryDict: {'next':['']}> 이런식으로 값을 가져오고 request.GET.get('key')로 값을 가져오면 해당 key가 없어도 에러가 발생하지 않는다.

 

  • accounts/views.py
class SignupView(CreateView):
    model = User
    form_class = SignupForm
    template_name = 'accounts/signup.html'

    def get_success_url(self):
        next_url = self.request.GET.get('next') or 'profile'
        return resolve_url(next_url)

    def form_valid(self, form):
        user = form.save()
        auth_login(self.request, user)
        return redirect(self.get_success_url())

signup = SignupView.as_view()
  • 같은 코드를 cbv로 구현 

 

요약

  • next인자를 지정하여 로그인, 로그아웃 시 이동할 페이지를 설정할 수 있다.
  • 'request'를 통해 get,post인자를 포함한 여러가지 정보를 받아 올 수 있다.

날짜

  • 오후 5시 30분, 20190902
Comments