Django-simple-captcha検証コードパッケージの使用方法詳細


django-simple-captchaはdjangoの検証コードパッケージで、とても簡単で実用的です。今回記録したのはどのように検証コードをクリックして検証コードを更新しますか?この機能の公式文書は詳細に提供されていません。
django-simple-captcha公式文書:http://django-simple-captcha.readthedocs.io/en/latest/
django-simple-captchaのgithub URL:https://github.com/mbi/django-simple-captcha
開始
1.pip install django-simple-captchaをインストールして、pip install Pillow
2.captchaをsettings.pyのINSTALLED_に加える。APPS
3.python manager.py makemigrationsとpython manage.py migrateを実行します。
4.urlルートはurls.pyのurlpatternsに加入する。

urlpatterns = [
  path('captcha/', include('captcha.urls')),    #         
  path('refresh_captcha/', views.refresh_captcha),  #      ,ajax
  path('test/',IndexView.as_view()),         #get post    
]
5.views.pyに以下のコードを入れる

from django.shortcuts import render
from django.views.generic import View
from captcha.models import CaptchaStore
from captcha.helpers import captcha_image_url
from django.http import HttpResponse
import json


#      
def captcha():
  hashkey = CaptchaStore.generate_key() #      
  image_url = captcha_image_url(hashkey) #      
  captcha = {'hashkey': hashkey, 'image_url': image_url}
  return captcha

#     
def refresh_captcha(request):
  return HttpResponse(json.dumps(captcha()), content_type='application/json')

#      
def jarge_captcha(captchaStr, captchaHashkey):
  if captchaStr and captchaHashkey:
    try:
      #     hashkey       response 
      get_captcha = CaptchaStore.objects.get(hashkey=captchaHashkey)
      if get_captcha.response == captchaStr.lower(): #        
        return True
    except:
      return False
  else:
    return False


class IndexView(View):
  def get(self, request):
    hashkey = CaptchaStore.generate_key() #      
    image_url = captcha_image_url(hashkey) #      
    print(hashkey,image_url)
    captcha = {'hashkey': hashkey, 'image_url': image_url}
    return render(request, "login.html", locals())

  def post(self, request):
    capt = request.POST.get("captcha", None) #         
    key = request.POST.get("hashkey", None) #      
    if jarge_captcha(capt, key):
      return HttpResponse("     ")
    else:
      return HttpResponse("     ")
6.templatesフォルダの下のlogin.の内容

{% load static %}
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.0.0/js/bootstrap.js"></script>
</head>
<body>
  <form action="/test/" method="post">
    {% csrf_token %}
    <a href="#" rel="external nofollow" class="captcha">
      <img src="{{ captcha.image_url }}" alt="    " id="id_captcha" >
    </a> <br>
    <input type="text" name="captcha" placeholder="   "> <br>
    <input value="{{ captcha.hashkey }}" name="hashkey" type="hidden" id="id_captcha_0">
    <button type="submit" class="btn btn-primary btn-block ">  </button>
  </form>
<script>
    <!--        js -->
    $(document).ready(function(){
      $('.captcha').click(function () {
        $.getJSON("/refresh_captcha/", function (result) {
          $('#id_captcha').attr('src', result['image_url']);
          $('#id_captcha_0').val(result['hashkey'])
        });
      });
    });
</script>
</body>
</html>
django-simple-captchaはsessionを使って検証コードを保存していません。データベースを使って移動しているときにテーブルcaptchaを生成します。captchastoreには、以下のフィールドが含まれています。
challege=models.chard Field(blank=False、max_length=32)〓〓〓〓〓〓の検証コードの大文字あるいは数学はたとえば1+1を計算します。
レスポンス=models.Chihard Field(blank=False、max_length=32)菗菗は入力する検証コードを必要とします。小文字または数学計算の結果は例えば2です。
hashkey=models.chard Field(blank=False、max_length=40,unique=True)菗hash値
expiration=models.DateTimeField(blank=False)菗の期限切れ時間
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。