Home > Software engineering >  UnboundLocalError at /register/ local variable 'form_value' referenced before assignment
UnboundLocalError at /register/ local variable 'form_value' referenced before assignment

Time:10-26

I'm trying to get into it the register page but i cant

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)

Traceback

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

Maybe have problem with indentation, please help me

CodePudding user response:

You need to define the form object for GET requests.

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)

You can check whether the user is authenticated or not, by using decorators more reusable way. 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

in views.py

@unauthenticated_user
def registerPage(request):
    ...
  • Related