我的简单验证码表格的django会话密钥错误

时间:2014-01-01 16:10:07

标签: django session captcha

我只是为我的登录表单编写一个简单的验证码。 我只是添加一个简单的会话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方法,以及在其他视图函数中?

感谢

1 个答案:

答案 0 :(得分:0)

您可能还想查看现有的Django验证码包,而不是采用这种方法: https://www.djangopackages.com/grids/g/captcha/

如果您正在寻找简单的东西,Django-Simple-Captcha是一个不错的选择。