2016-08-17 2 views
1

성공적으로 등록한 후 사용자는 'registration_done.html'템플릿으로 리디렉션됩니다.장고 등록 | 변경 동작

이 동작을 변경하여 사용자를 등록 페이지로 리디렉션하고 메시지를 표시하는 방법이 있습니까?

아래 코드를 시도해 보았습니다. 다른 방법으로 시도해 보았지만 다른 경우에는 다른 유형의 오류가있었습니다.

urls.py

url(r'^register/$', 
     views.register, 
     { 
      'success_url': '/accounts/register/?success=true' 
     }, 
     name='register'), 

view.py

def register(request): 
    if request.method == 'POST': 
     user_form = UserRegistrationForm(request.POST) 
     if user_form.is_valid(): 
      # Create a new user object but avoid saving it yet 
      new_user = user_form.save(commit=False) 
      # Set the chosen password 
      new_user.set_password(user_form.cleaned_data['password']) 
      # Save the User object 
      new_user.save() 
      success = request.GET.get('success', None) 
      return render(request, {'new_user': new_user, 'success': success}) 
    else: 
     user_form = UserRegistrationForm() 
    return render(request, 'account/register.html', {'user_form': user_form}) 

registration.html :

{% if success %} 
     <p>{% trans 'Successfull registration!' %}</p> 
{% endif %} 

무슨 잘못 I 그랬어?

오류 :

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
TypeError: register() got an unexpected keyword argument 'success_url' 
[18/Aug/2016 14:17:55] "GET /en/account/register/ HTTP/1.1" 500 59886 
+0

무엇을 오류? –

+0

게시글에서 볼 수있는 코드와 함께 'AccountError at/account/register/ register()에 예상치 못한 키워드 인수'success_url '이 있는데 내 작업을 수행하는 좋은 방법이 있습니까? 당신은 어떻게 생각하십니까?! –

+0

여기에 스택 추적 모양이 나와 있습니다. https://camo.githubusercontent.com/b26cf0dfe73d3bbf2e74fcae277c0b667930366f/687474703a2f2f692e696d6775722e636f6d2f326749644f4e352e706e67 –

답변

1

당신은 당신의 기능 register

함수에 kwarg success_url을 통과하려고하는 register(request) 하나 개의 인수를 허용합니다 '요청'.

그래서 두 번째 인수를 받아 들일 수 있도록

def register(request, success_url): 
    ... 

처럼 success_url 말을하지만 일을 아무 문제가 없다 success_url가 일정한 경우 그. 이 경우, 그냥 오히려 하드 코드 그것보다, 여기에 또 다른 포인트는 당신이 reverse that url에 원하는 당신의 레지스터 기능

def register(request): 
    success_url = 'foo' 

정의합니다.

success = request.GET.get('success', None) 

모든 사용자가 GET 요청에서 자신의 성공 변수를 제출할 수있다 : 당신이 사용하고자하는 이유

또한 잘 모르겠어요. 이것을 양식에서 기대하십니까? 사용자가 요청에 성공했다고 말할 수있는 경우 보안 취약점처럼 보입니다 .GET.

첫 번째 render 호출에서 템플릿 이름/경로가 누락되었으므로 실제로는 템플릿을 실제로 렌더링하지 않습니다.

그래서 템플릿을 추가하거나 다른 페이지로 리디렉션하십시오.

+0

물론 슬픈 일입니다.성공적인 등록 후 등록 페이지로 리디렉션하려고했으나 양식이 사라졌지만 양식이 있습니다. 이상하게 보입니다. –

+0

어떻게 리디렉션을 시도 했습니까? –

+0

리디렉션이 아닌 'return render (request,'account/register_done.html ', {'new_user ': new_user,'success ': success})' –