图片验证码功能在Django中超级简单的实现

您所在的位置:网站首页 pixiv登录需要recaptcha验证 图片验证码功能在Django中超级简单的实现

图片验证码功能在Django中超级简单的实现

2023-06-04 00:13| 来源: 网络整理| 查看: 265

图片验证码功能在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