成功注册后,用户将被重定向到模板'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 %}
我做错了什么?!
错误:
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 :(得分:1)
您正试图将kwarg success_url
传递给您的函数register
您的函数register(request)
只接受一个参数:&#39;请求&#39;。
所以你可以接受第二个参数,比如success_url,就像这样
def register(request, success_url):
...
但是如果success_url是常量,那就没有意义。在这种情况下,只需将其定义为寄存器功能
即可def register(request):
success_url = 'foo'
这里的另一点是你要reverse that url,而不是硬编码。
此外,我不确定您为什么要使用此功能:
success = request.GET.get('success', None)
任何用户都可以在GET请求中提交自己的成功变量。你是否期望从表格中得到这个?如果用户只能说在request.GET。
中成功,则看起来像是一个安全漏洞目前您还没有成功渲染模板,因为您在第一次render
电话中缺少模板名称/路径。
所以要么添加模板,要么将它们重定向到另一个页面。