赋值前引用的 /register/ 局部变量 'form_value' 处的 UnboundLocalError

UnboundLocalError at /register/ local variable 'form_value' referenced before assignment

我想进入注册页面但是我不能

views.py

def registerPage(request):
    if request.user.is_authenticated:
        return redirect('home')
    else:
        if request.method == 'POST':
            form_value = CreateUserForm(request.POST)
            if form_value.is_valid():
                form_value.save()
                user = form_value.cleaned_data.get('username')
                messages.success(request, 'Account was create for {}'.format(user)) 
                return redirect('login')

            context = {'form_key':form_value}
            return render(request, 'accounts/register.html', context)

回溯

File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\le\anaconda3\envs\myenv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\le\Desktop\django-course\Django(02-09-21)\crm1\accounts\views.py", line 26, in registerPage
    context = {'form_key':form_value}
UnboundLocalError: local variable 'form_value' referenced before assignment

可能缩进有问题,请帮助我

您需要为 GET 个请求定义表单对象。

def registerPage(request):
    if request.user.is_authenticated:
        return redirect('home')
    else:
        if request.method == 'POST':
            form_value = CreateUserForm(request.POST)
            if form_value.is_valid():
                form_value.save()
                user = form_value.cleaned_data.get('username')
                messages.success(request, 'Account was create for {}'.format(user)) 
                return redirect('login')

        form_value = CreateUserForm()    # < --- here    
        context = {'form_key':form_value}
        return render(request, 'accounts/register.html', context)

您可以使用 decorators 更可重用的方式来检查用户是否已通过身份验证。 ref

decorators.py

# checks whether the user is logged in and control accessing to register page
def unauthenticated_user(views_func):
    def wrapper_func(request, *args, **kwargs):
        if request.user.is_authenticated:
            return redirect('/')
        else:
            return views_func(request, *args, **kwargs)

    return wrapper_func

在views.py

@unauthenticated_user
def registerPage(request):
    ...