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フィールド、送信ボタンが含まれています。
以上で実装は完了です。あとは実際に出力結果を確認してみましょう。
出力結果

-
Tkinterで画像を追加・表示する方法を解説!Pillowとfiledialogの使い方
画像は、あらゆるアプリケーションにおいて非常に有用な要素のひとつです。Pythonでは、Pillow(PIL)パッケージを利用することで、Tkinterアプリケーション内でも簡単に画像を扱うことができます。画像の読み込みや抽出、画像ペインの設定など、便利な機能が多数用意されています。 サンプルコード:ダイアログで選択した画像を表示する 以下の例では、ユーザーがファイルダイアログから画像を選択し、その画像をLabelウィジェットを使ってウィンドウ上に表示します。 #Tkinterライブラリをインポート from tkinter import * from tkinter import ttk
-
ウェブサイトを丸ごとオフライン保存する方法!Windows・Mac・Android・iOS別に徹底解説
インターネット上には数億ものウェブサイトが存在し、それぞれに独自のユーザー層を持っています。これらのサイトを開くにはインターネット接続が不可欠で、コンテンツを表示するためにはある程度のデータをダウンロードする必要があります。しかし、特定のサイトを読みたいのに、インターネットに接続できない環境にいることもあるでしょう。困ったことに、ほとんどのウェブサイトはサイト全体のオフラインコピーを保存する機能を提供しておらず、良くても1ページだけを後で読めるように保存できる程度です。そのため、サイト全体を閲覧したいユーザーの選択肢は大きく制限されてしまいます。そこで本記事では、ウェブサイト一式をダウンロード