Web开发

注册

 

发新话题 回复该主题

Python37开发Django22 [复制链接]

1#
北京治疗白癜风哪里比较好 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

分享 转发
TOP
发新话题 回复该主题