当前位置:   article > 正文

逐步记录:验证码CAPTCHA加入我的Django项目_captcha.conf

captcha.conf

Django项目要上线运行,加一些安全措施。比如其一:验证码

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写。

原想着有些难度的,实际操作起来很简单,就简单的几步操作:

1、安装 django-simple-captcha

  1. pip install django-simple-captcha -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. # 用下面这个直接安装没成功,提示版本不匹配 不知道为啥
  3. pip install django-simple-captcha

2、注册captcha  至 settings.py

  1. # settings.py
  2. INSTALLED_APPS = [
  3. ...
  4. 'captcha',
  5. ]

3、 添加captcha路由到Django项目的urls.py文件中

  1. from django.urls import path, include
  2. urlpatterns = [
  3. ...
  4. path('captcha/',include('captcha.urls')), # 验证码
  5. ]

 4、创建验证码数据表

  1. # 同步captcha数据表
  2. python manage.py migrate
  3. # 生成表 captcha_captchastore
  4. >>>
  5. Applying captcha.0001_initial... OK
  6. Applying captcha.0002_alter_captchastore_id... OK

 

  1. # 插曲
  2. # 因为报错 django.db.utils.OperationalError: (1050, "Table 'yunbo_category' already exists")
  3. # 又重温了一下的命令
  4. python manage.py migrate myapp --fak # 忽略
  5. python manage.py migrate --fake yunbo

5、  修改login.html 页面, 增加验证码内容

  1. <div class="form-group">
  2. {{ login_form.captcha.errors }}
  3. {{ login_form.captcha.label_tag }}
  4. {{ login_form.captcha }}
  5. </div>

6、验证码的APP添加forms文件,进入forms.py

  1. # 官方语句
  2. from django import forms
  3. from captcha.fields import CaptchaField
  4. class CaptchaTestForm(forms.Form):
  5. myfield = AnyOtherField()
  6. captcha = CaptchaField()
  7. # 实际我加的语句
  8. from captcha.fields import CaptchaField
  9. captcha = CaptchaField(
  10. label='验证码',
  11. required=True,
  12. error_messages={
  13. 'invalid': '验证码错误', # 报错改到view的登录函数了,这里本语句已无效
  14. }
  15. )

 

7、在项目的Views.py文件中添加form验证码表单的语句

  1. # 官方语句
  2. if form.is_valid(): # 如果form有效
  3. human = True # 是真人操作,不是机器

  但是,我的form验证 已经有这个语句,就不用加验证语句了。

但是我把验证码的验证报错 和 用户登录的验证报错 合到一块了。

结果:

显示位置和项目统一起来,更加完美。

8、login.html鼠标点击验证码刷新

当前已经部署完了,能正常运行了。但最好还要加上鼠标点击验证码刷新功能。

  1. #login.html 加入scriptdaima 实现验证码刷新
  2. <script type="text/javascript" charset="utf8" src="/static/js/jquery-1.4.4.min.js">
  3. </script>
  4. <script>
  5. $('.captcha').click(function () {
  6. $.getJSON("/captcha/refresh/", function (result) {
  7. $('.captcha').attr('src',result['image_url']);
  8. $('#id_captcha_0').val(result['key'])
  9. });
  10. });
  11. </script>

 

over,运行看结果,如图:

1、输入错误也会显示验证码错误。

2、点击验证码可以刷新。

3、3项输入都正确能登录系统。

到此就算完成任务了,大功告成,该拜拜了!

但是,测试输入字母的验证码时,总感觉难度有点大,总是输入错误,所以想改为算术加减乘除验证码。

9、使用算术加减乘除验证码

在setting文件末尾加入如下代码:

  1. #不加本段代码,默认已有字符验证码,不影响项目运行
  2. # 字母验证码
  3. # CAPTCHA_IMAGE_SIZE = (80, 45) # 设置 captcha 图片大小
  4. # CAPTCHA_LENGTH = 4 # 字符个数
  5. # CAPTCHA_TIMEOUT = 1 # 超时(minutes)
  6. # 加减乘除验证码
  7. CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '
  8. CAPTCHA_NOISE_FUNCTIONS = (
  9. 'captcha.helpers.noise_null', # 没有样式
  10. # 'captcha.helpers.noise_arcs', # 线
  11. 'captcha.helpers.noise_dots', # 点
  12. )
  13. # CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
  14. # 图片中的文字为随机英文字母
  15. CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
  16. # 图片中的文字为数字表达式,如1+2
  17. CAPTCHA_TIMEOUT = 1

至此,已修改完毕,查看运行结果:

现实的难易程度可以在刚才的代码 CAPTCHA_NOISE_FUNCTIONS 里设置,为了减低识别度,只用了点,没用线,就容易识别使用了,但是也降低了被破解的几率,无所谓了,又不是啥重要内容,测试而已。

到此完美结束!!!

10、号外:修改 captcha 默认格式

%python_path%\Lib\site-packages\captcha\conf\settings.py    或  %project_path%\venv\Lib\site-packages\captcha\conf\settings.py
同时可以修改 captcha\templates\captcha 下的 HTML 文件,更改页面显示格式

  1. # 设置验证码字符旋转角度
  2. CAPTCHA_LETTER_ROTATION = getattr(settings, "CAPTCHA_LETTER_ROTATION", (-35, 35))
  3. # 设置验证码前后背景色
  4. CAPTCHA_BACKGROUND_COLOR = getattr(settings, "CAPTCHA_BACKGROUND_COLOR", "#fff000")
  5. CAPTCHA_FOREGROUND_COLOR = getattr(settings, "CAPTCHA_FOREGROUND_COLOR", "#000000")
  6. # 设置验证码干扰线,降低被机器识别的风险
  7. CAPTCHA_NOISE_FUNCTIONS = getattr(
  8. settings,
  9. "CAPTCHA_NOISE_FUNCTIONS",
  10. ## ("captcha.helpers.noise_arcs", "captcha.helpers.noise_dots"),
  11. ("captcha.helpers.noise_null", "captcha.helpers.noise_null"),
  12. )
  13. # 设置验证码字符长度
  14. CAPTCHA_LENGTH = int(getattr(settings, "CAPTCHA_LENGTH", 5)) # Chars
  15. # 设置验证码 输入 与 验证码 显示顺序
  16. CAPTCHA_OUTPUT_FORMAT = getattr(settings, "CAPTCHA_OUTPUT_FORMAT", None)
  17. -->
  18. CAPTCHA_OUTPUT_FORMAT = getattr(settings, "CAPTCHA_OUTPUT_FORMAT", u'%(text_field)s %(hidden_field)s %(image)s')
  19. # 超时时间
  20. CAPTCHA_TIMEOUT = getattr(settings, "CAPTCHA_TIMEOUT", 1) # Minutes

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/983005
推荐阅读
相关标签
  

闽ICP备14008679号