图片验证码功能在Django中超级简单的实现 |
您所在的位置:网站首页 › pixiv登录需要recaptcha验证 › 图片验证码功能在Django中超级简单的实现 |
图片验证码功能在Django中
很多场景下Web应用需要利用图片验证码以防范暴力攻击,比如在用户登录页面。而Django以及配合django-simple-captcha模块可以非常轻松的实现图片验证码功能。 安装django-simple-captcha模块: pip install django-simple-captcha在项目的settings.py文件中做如下操作:(备注:假设你已经将开发所有其他部分的代码,比如model,模板,views等等) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', "app01", #你之前已经创建好的app,普通的app "captcha" # ]这样就将captcha注册为app。 在urls.py文件中添加captha的url(备注:你现有的url无需做任何修改) # 其他的url path('/captcha',include("captcha.urls")) #假设已经导入include在views.py中,你此前已经创建的form类增加captcha部分: from django import forms from captcha.fields import CaptchaField class LoginForm(forms.Form): #此处应该有其他字段(之前已经创建的,比如username, password等 captcha=CaptchaField()这样我们自己定义的LoginForm(它继承于forms.Form类)就有了captcha字段,此时就可以与其他字段一起传给前端模板 比如在views.py def account_login(request): if requesthod == 'GET': form = LoginForm() print(form) return render(request,'account_login.html',{'form':form}) form = LoginForm(data=request.POST) if form.is_valid(): admin_object = models.Admin.objects.filter(username=form.cleaned_data.get('username'),password=form.cleaned_data.get('password') ).first() if not admin_object: form.add_error('password','输入用户名或者密码错误) return render(request,'account_login.html',{'form':form}) else: request.session['info'] = {'id':admin_object.id,'username':admin_object.username} return redirect('/admin/list/') return render(request,'account_login.html',{'form':form})这里需要注意的是,由于我们自己创建的LoginForm,增加了captha字段,该字段并没有存储在数据库表中,因此models.Admin.objects.filter(** form.cleaned_data)不能用字典的方式传参,而是直接用上述方法直接取相应的字段去数据库中进行查询。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |