Python
 Computer >> コンピューター >  >> プログラミング >> Python

Django WebサイトにCAPTCHA(キャプチャ)を追加する方法をわかりやすく解説

CAPTCHA(キャプチャ)は、近年のWebサイトでユーザー認証に広く使われている手法のひとつです。ボットによる不正アクセスを防ぐために非常に有効で、多くのサイトが採用しています。GoogleのreCAPTCHAを利用することもできますが、設定がやや複雑で手間がかかるのが難点です。そこで便利なのが、Djangoで使えるdjango-simple-captchaというライブラリです。これを使えば、よりシンプルにCAPTCHAを実装できます。

この記事では、Django WebサイトにCAPTCHAを作成・導入する方法をステップごとに解説していきます。それでは始めましょう。

実装例

まずはじめに、Djangoプロジェクトとアプリケーションを作成してください。

次に、django-simple-captchaライブラリをインストールします。

pip install django-simple-captcha

settings.pyを開き、INSTALLED_APPS内に自作アプリ名と「captcha」を追加します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "captchaproject", # アプリ名
    "captcha" # モジュール名
]

これでcaptchaがアプリとして登録されます。

URLの設定

続いて、プロジェクト直下のurls.pyに以下のコードを追記します。

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("captchaproject.urls")),
    path('/captcha',include("captcha.urls"))
]

これにより、自作アプリへのURLと、認証処理が行われるcaptcha用のURLが有効になります。

フォームの作成

アプリのメインディレクトリにforms.pyというファイルを作成し、以下のコードを記述します。

from django import forms
from captcha.fields import CaptchaField

class MyForm(forms.Form):
    captcha=CaptchaField()

ここでは、CAPTCHAフィールドを持つフォームを定義しています。

忘れずに「python manage.py migrate」コマンドを実行して、データベースへ反映させてください。

ビューの作成

次に、アプリのviews.pyに以下のコードを追加します。

from django.shortcuts import render
from .forms import MyForm
# Create your views here.
def home(request):
    if request.method=="POST":
        form=MyForm(request.POST)
        if form.is_valid():
            print("success")
        else:
            print("fail")
    form=MyForm()
    return render(request,"home.html",{"form":form})

homeビューでフォームをレンダリングし、POSTリクエストのハンドラ内でフォーム(つまりCAPTCHA)の検証を行っています。検証後、その結果を出力します。

テンプレートの作成

templatesディレクトリ(レンダリングするHTMLやCSSファイルを格納するフォルダです。すでに設定済みであることを前提としています)にHTMLファイルを作成し、以下のコードを記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>Tut</title>
    </head>
    <body>
        <form method="POST" novalidate>
            {%csrf_token%}
            {{form.captcha}}
            <input type="submit" value="submit">
        </form>
    </body>
</html>

これはCAPTCHAフォームを表示するフロントエンド部分です。CSRFトークンとCAPTCHAフィールド、送信ボタンが含まれています。

以上で実装は完了です。あとは実際に出力結果を確認してみましょう。

出力結果

Django WebサイトにCAPTCHA(キャプチャ)を追加する方法をわかりやすく解説

  1. Tkinterで画像を追加・表示する方法を解説!Pillowとfiledialogの使い方

    画像は、あらゆるアプリケーションにおいて非常に有用な要素のひとつです。Pythonでは、Pillow(PIL)パッケージを利用することで、Tkinterアプリケーション内でも簡単に画像を扱うことができます。画像の読み込みや抽出、画像ペインの設定など、便利な機能が多数用意されています。 サンプルコード:ダイアログで選択した画像を表示する 以下の例では、ユーザーがファイルダイアログから画像を選択し、その画像をLabelウィジェットを使ってウィンドウ上に表示します。 #Tkinterライブラリをインポート from tkinter import * from tkinter import ttk

  2. ウェブサイトを丸ごとオフライン保存する方法!Windows・Mac・Android・iOS別に徹底解説

    インターネット上には数億ものウェブサイトが存在し、それぞれに独自のユーザー層を持っています。これらのサイトを開くにはインターネット接続が不可欠で、コンテンツを表示するためにはある程度のデータをダウンロードする必要があります。しかし、特定のサイトを読みたいのに、インターネットに接続できない環境にいることもあるでしょう。困ったことに、ほとんどのウェブサイトはサイト全体のオフラインコピーを保存する機能を提供しておらず、良くても1ページだけを後で読めるように保存できる程度です。そのため、サイト全体を閲覧したいユーザーの選択肢は大きく制限されてしまいます。そこで本記事では、ウェブサイト一式をダウンロード