로그인 후 특정 페이지로 redirect 하기

게시글 작성화면이나 메인 화면에서 로그인 버튼을 누르면 로그인을 한 후 해당 페이지로 다시 돌아오는 로직을 작성하고 싶었다.
accounts/views.py
@require_http_methods(['GET', 'POST'])
@login_required
def login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
auth_login(request, form.get_user())
next_url = request.GET.get('next', '')
return redirect(next_url)
else:
form = AuthenticationForm()
context = {'form': form}
return render(request, 'accounts/login.html', context)
accounts/login.html
{% extends 'base.html' %}
{% block content %}
<h1>로그인</h1>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" action="" value="로그인">
</form>
{% endblock content %}
NoReverseMatch 오류가 나왔다.
쿼리스트링을 통해 HTML에서 이전 페이지의 정보를 받아온 후, next 정보를 사용하여 뷰로
리다이렉션하는 방법이 필요한 것 같다.
next 파라미터를 사용해 사용자가 로그인에 성공했을 때 이전 페이지로 리디렉션하기 위해 hidden
필드로 전달한다.
여기서 request.Get.next는 현재 요청의 쿼리스트링에서 next 파라미터의 값을 가져오는 것을
의미한다.
따라서 이전 페이지의 url이 next 파라미터로 전달되어 로그인 이후에 이전 페이지로 이동할 수 있다.
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="hiddem" name='next' value={{ request.GET.next }}>
<input type="submit" value="로그인">
</form>
메인 페이지로는 정상적으로 접근이 되었지만 로그인 페이지로 이동하면 리디렉션의 횟수가 많다는
오류가 났다. -> 클라이언트 요청을 계속해서 보내고 있다 (무한 리디렉션 루프)에 빠진 것인데, 서버가 요청을 받고 클라이언트로 보내고는 과정이 반복된 것이다.


/accounts/login/ 라는 글자가 계속 보이는걸 보니 로그인 시도가 실패하고 다시 로그인 페이지로
돌아가고가 반복되는 것 같다.
# @require_http_methods(['GET', 'POST'])
@require_POST

post가 안돌아간다.
정말 바보같은 실수를 했다.
로그인을 하려고 하는 곳에서 @login_required 를 붙여두고 로그인을 시도하려고 했다.
@login_required
로그인된 경우만 아래 함수가 실행될 수 있도록 하고, 로그인하지 않은 상태로 아래 함수를 호출하게 되면 해당 유저는 로그인 화면으로 넘어가게 한다.
정말 허무했던 실수 끝
@require_http_methods(['GET', 'POST'])
def login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
auth_login(request, form.get_user())
next_url = request.GET.get('next') or 'products:main'
return redirect(next_url)
else:
form = AuthenticationForm()
context = {'form': form}
return render(request, 'accounts/login.html', context)




