出现 local variable ‘new_user‘ referenced before assignment 或者 name ‘new_user‘ is not defined 问题 的解决

1(问题)

最近在整《Python编程从入门到实践》的的"学习笔记"项目时,遇到的麻烦。

最开始整个项目是很正常,但当我朋友用了一下程序就出现问题极大的毛病(这很离谱)。

 在这learning_log\users\views.py  书上是这样的

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
    
def register(request):
    """注册新用户"""
    if request.method != 'POST':
        #显示空的注册表
        form = UserCreationForm()
    else:
        #处理表单
        form = UserCreationForm(data=request.POST)  
        
        if form.is_valid():
            new_user = form.save()
        login(request, new_user)
        return redirect ('learning_logs:index')                               
    #显示空的表单 OR 指出表,单无效
    context = {'form': form}
    return render(request, 'registration/register.html', context)

但提示

UnboundLocalError at /users/register/

local variable 'new_user' referenced before assignment.........

learning_log\users\views.py, line 17, in register

  1.         login(request, new_user)>>>>>>>>>>>>的问题

按照百度:全局变量的说法  --->>> 

更改为

--snip--

if form.is_valid():
            global new_user
            new_user = form.save()
        login(request, new_user)
        return redirect ('learning_logs:index')   
--snip--  

但,很不幸 但同样出错,好像还更离谱了

2(仔细分析,终于发现问题)

else:
        #处理表单
        form = UserCreationForm(data=request.POST)  
        
        if form.is_valid():
            new_user = form.save()           
        login(request, new_user)
        return redirect ('learning_logs:index') 

如果form.is_valid()==False 也会login 但 new_user = form.save()未执行

故 new_user==???? 无值

3(解决方法)

 把 login(request, new_user)  缩进一下,如下

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
    
def register(request):
    """注册新用户"""
    if request.method != 'POST':
        #显示空的注册表
        form = UserCreationForm()
    else:
        #处理表单
        form = UserCreationForm(data=request.POST)  
        
        if form.is_valid():
            new_user = form.save()           
            login(request, new_user)
        return redirect ('learning_logs:index')                               
    #显示空的表单 OR 指出表,单无效
    context = {'form': form}
    return render(request, 'registration/register.html', context)

  以上是我的解决方法,如有问题,@me

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值