0
点赞
收藏
分享

微信扫一扫

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

沈芏 2022-03-30 阅读 46
pythondjango

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

举报

相关推荐

0 条评论