我只是为我的登录表单编写一个简单的验证码。
我只是添加一个简单的会话data.request.session['captcha']
。
这是登录视图功能:
login (request):
if request.method =='GET':
form = LoginForm(auto_id=True)
a = random.randrange(1,10,1)
b = random.randrange(10,20.1)
request.session['captcha1']=a
request.session['captcha2']=b
return render_to_response('login.html',locals(),context_instance=RequestContext(request))
if request.method =='POST':
form = LoginForm(data=request.POST)
if form.is_valid():
captcha= request.POST.get('captcha','')
result = request.session.get('captcha1') + request.session.get('captcha2')
if captcha==result:
data = form.clean()
user=authenticate(username= data['username'],password = data['password'])
if user is not None:
auth_login(request,user)
return HttpResponseRedirect('/')
else:
form = LoginForm(auto_id=True)
return render_to_response('login.html',locals(),context_instance=RequestContext(request))
这是登录表单
class LoginForm (forms.Form):
username = forms.CharField(
label='username')
password =forms.CharField(
label='password',widget = forms.PasswordInput())
captcha = forms.CharField(label='spam chercker')
我得到了captcha1,captcha2的关键词,当我添加print request.session['captcha1']
时,它会显示None
。这意味着,当POST,我没有得到django会话数据时,没有数据captcha1和captcha2
如何在django会话中存储数据,并将其传递给POST方法,以及在其他视图函数中?
感谢
答案 0 :(得分:0)
您可能还想查看现有的Django验证码包,而不是采用这种方法: https://www.djangopackages.com/grids/g/captcha/
如果您正在寻找简单的东西,Django-Simple-Captcha是一个不错的选择。