北京治疗白癜风哪里比较好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/jzpj/除了密码加密之外,验证码也是安全性的保障之一。开发B/S的同学,应该很清楚,它可以防止不法分子在短时间内用机器批量的重复操作,防止机器人程序暴力登录或攻击。
如今,为了提高破解难度,有购票验证那种,还有众多平台拼图那种,常见的是咱们这次要说的,由随机数字和字母组成这种。
1
在Django框架中,你可以自己写一个生成验证码的类,也可以别人已经写好并且开源的第3方验证码库:captcha。
不懂得偷懒的程序猿不是好工程师,在能满足需求的前期下,考虑先用现成的。要让django项目支持captcha,请打开,输入:pip3installdjango-simple-captcha命令。
2
安装完captcha开发库后,打开django项目,进行配置。目标定位到settings.py文件中的INSTALLED_APPS节点,在其最后添加上captcha。
还记得上一次,在此添加sales后,咱们做了什么动作么?--没错,就是生成数据库表结构,这次也不例外,还是执行:python3manage.pymakemigrations和python3manage.pymigrate命令。
有了数据表还不够,还得提供访问路径,否则没办法获取验证码。打开sales/urls.py文件,改成如下内容。
fromdjango.urlsimportinclude,path
from.importviews
#进行方法和请求名称绑定
urlpatterns=[
path(index/,views.index),
path(reg/,views.reg),
path(captcha/,include(captcha.urls)),
]
3
配置好了以后,接着就是应用了。打开views.py文件,导入生成验证码需要用到的模块并调整返回登录界面时的代码,完整代码贴出来,拿走不谢。
fromdjango.shortcutsimportrender
fromsales.modelsimportUserInfo#导入models文件
fromerpsite.utils.EncryptUtilimportMD5Encrypt
#验证码需要导入的模块
fromcaptcha.modelsimportCaptchaStore
fromcaptcha.helpersimportcaptcha_image_url
login_result=
reg_result=
defreg(request)
/p>
globalreg_result
ifrequest.method==POST
/p>
account=request.POST.get(account,)
password=request.POST.get(password,)
#密码进行加密
password=MD5Encrypt.encrypt(password)
print(password:,password)
try
/p>
#将数据保存到数据库
UserInfo.objects.create(account=account,password=password)
reg_result=恭喜你,注册成功!
exceptExceptionase
/p>
reg_result=注册失败,错误信息:+str(e)
returnrender(request,sales/reg.html,{result:reg_result})
defindex(request)
/p>
globallogin_result
ifrequest.method==POST:
account=request.POST.get(account,)
password=request.POST.get(password,)
#密码进行加密
password=MD5Encrypt.encrypt(password)
user=UserInfo.objects.filter(account=account,password=password)
ifuser.exists():
login_result=恭喜你,登录成功!
else:
login_result=登录账号或密码不正确!
returnrender(request,sales/index.html,{result:login_result})
else:
#验证码,第一次请求
hashkey=CaptchaStore.generate_key()
image_url=captcha_image_url(hashkey)
captcha={hashkey:hashkey,image_url:image_url}
returnrender(request,sales/index.html,{captcha:captcha})
生成好验证码后,总得显示的。打开登录界面index.html,新增验证码显示的内容。完整代码也粘贴在此,拿走不谢。
!DOCTYPEhtml
html
head
metacharset=UTF-8
title登录登陆/title
/head
body
formaction=/sales/index/method=post
{%csrf_token%}
h2用户登录/h2
h3style=color:red;{{result}}/h3
p
labelfor=account账号:/label
inputtype=textid=accountname=accountplaceholder=请输入账号/
/p
p
labelfor=password密码:/label
inputtype=passwordid=passwordname=passwordplaceholder=请输入密码/
/p
p
inputtype=textid=codename=codeplaceholder=请输入验证码/
imgsrc={{captcha.image_url}}alt=点击换一张id=id_captcha
/p
p
inputtype=submitvalue=登录/
ahref=/sales/regstyle=margin-left:10px;text-decoration:none注册/a
/p
/form
/body
/html
4
好了,好了。终于可以运行看看效果了,Yeah!Yeah!结果如你所愿,成功显示出了验证码。
当然,在这个颜值的时代,效果可能没那么好看,但实际上是可以调整的。有关验证码的格式,可到进行设置,给出部分参数,请自行调整去吧。
#图片大小
CAPTCHA_IMAGE_SIZE=(80,30)
CAPTCHA_BACKGROUND_COLOR=#ffff00
#图片中的文字为随机英文字母
CAPTCHA_CHALLENGE_FUNCT=captcha.helpers.random_char_challenge
#图片中的文字为数字表达式
#CAPTCHA_CHALLENGE_FUNCT=captcha.helpers.math_challenge
#字符个数
CAPTCHA_LENGTH=4
#超时(minutes)
CAPTCHA_TIMEOUT=1