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