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
 
-  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










