Django访问注册页面报UnboundLocalError: form_value未赋值问题求助
问题根因分析
报错的核心原因是代码缩进错误,同时缺少GET请求的处理逻辑,导致form_value变量未定义就被引用:
- 当用户用GET方法访问
/register/页面时,request.method == 'POST'判断不成立,代码不会进入POST处理分支,form_value没有被定义,同时整个分支没有返回响应的逻辑,直接触发变量未定义的报错。 - 当前的响应返回逻辑缩进层级错误,仅能覆盖POST请求且表单验证失败的场景,无法覆盖其他请求场景。
修复后的代码
def registerPage(request): if request.user.is_authenticated: return redirect('home') else: # 处理POST表单提交逻辑 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 created for {}'.format(user)) return redirect('login') # 处理GET请求,实例化空表单 else: form_value = CreateUserForm() # 统一返回响应:GET返回空表单,POST验证失败返回带错误信息的表单 context = {'form_key': form_value} return render(request, 'accounts/register.html', context)
修复说明
- 新增GET请求处理分支,用户首次访问页面时会实例化空的表单对象,避免
form_value未定义 - 把
context赋值和render返回逻辑调整到和if request.method == 'POST'同级的位置,覆盖所有请求场景 - 修正了原代码中
create拼写错误的小问题(原代码为Account was create for,修正为created)
内容的提问来源于stack exchange,提问作者Lewcamps
相关产品推荐
相关产品推荐

