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

Djangoでコードを書かずにお問い合わせフォームを作成しデータを保存する方法

Djangoではお問い合わせフォームを簡単に作成できますが、実際にはフォームの定義、ビューの作成、モデルの設計、さらにAdminへのモデル登録など、多くの作業を管理する必要があります。

本記事では、事前に用意されたパッケージ「django-contactforms」を活用し、あらかじめ定義されたモデルへデータを自動保存するお問い合わせフォームの作成方法をご紹介します。models.pyviews.py にコードを書くことなく、独自のHTMLも最小限の記述で実装できる点が大きな魅力です。それでは早速始めましょう。

実装手順

まず、Djangoプロジェクトとアプリを作成しておいてください。

1. パッケージのインストール

以下のコマンドで django-contactforms パッケージをインストールします。

pip install django-contactforms

2. settings.py の設定

次に、settings.py の INSTALLED_APPS に以下の行を追加します。

INSTALLED_APPS += ["contactforms"]

このモジュールと、作成したアプリ名を INSTALLED_APPS に忘れずに登録してください。

3. プロジェクト側の urls.py

プロジェクトの urls.py に以下のようにルーティングを定義します。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('contactforms.urls')),
    path("aftercontact", include('MyForm.urls'))
]

ここでは2つのURLエンドポイントを用意しています。1つ目はお問い合わせフォームを表示するためのもので、2つ目はフォーム送信後のリダイレクト先です。

4. アプリ側の urls.py

アプリの urls.py は以下のとおりです。

from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.home, name="home"),
]

ここでは、お問い合わせフォームの入力完了後に表示するHTMLをレンダリングするためのルートを定義しています。

5. views.py の作成

views.py はシンプルに以下のように記述します。

from django.shortcuts import render

# Create your views here.
def home(request):
    return render(request, "home.html")

ここで送信後のページとなるHTMLをレンダリングしています。

6. テンプレートの作成

続いて、アプリディレクトリ内に「templates」フォルダを作成します。その中にさらに「contact」フォルダを作り、その中に contact.html というファイルを配置してください。contact.html には以下のコードを記述します。

<!DOCTYPE html>
<html>
    <body>
        <div class="row">
        <form action="{% url 'contact' %}" method="post">
        <h3>Send a Message</h3>
        {% csrf_token %}
        <div class="form-group">
            {% if messages %}
            {% for message in messages %}
            <span{% if message.tags %} class="{{ message.tags }}"{% endif %} style="color: green">
              {{ message }}
            </span>
            {% endfor %}
              {% endif %}
        </div>
        <div class="form-group">
            {{ forms.name }}
        </div>
        <div class="form-group">
            {{ forms.email }}
        </div>
        <div class="form-group">
            {{ forms.subject }}
        </div>
        <div class="form-group">
            {{ forms.message }}
        </div>
        <button class="btn btnprimary" type="submit">Submit</button>
    </form>
    </div>
    </body>
</html>

これが「/」エンドポイントで表示されるフォームです。パッケージが提供するフォームフィールド(名前・メールアドレス・件名・メッセージ)をそのまま読み込んで表示しているだけで、フォームクラスを自作する必要はありません。また、messagesフレームワークを使うことで、送信成功時の通知も簡単に表示できます。

次に、templates フォルダ直下(contactフォルダの中ではなく)に home.html を作成し、以下のコードを記述してください。

<!DOCTYPE html>
<html>
    <head><title>tut</title></head>
    <body>
        <h3>Successfull</h3>
    </body>
</html>

実行結果

サーバーを起動してトップページにアクセスすると、お問い合わせフォームが表示されます。フォームに入力して送信すると、データはパッケージが内部で持つモデルに自動的に保存され、リダイレクト先として home.html がレンダリングされます。

Djangoでコードを書かずにお問い合わせフォームを作成しデータを保存する方法

このように django-contactforms を使えば、モデル定義やビューのロジックをほぼ書かずにお問い合わせ機能を実装でき、開発工数を大幅に削減できます。小規模なサイトやプロトタイプ開発において特に有用なアプローチです。

  1. ユーザーフォーム不要!Excelでデータ入力フォームを作成する方法

    Excelの便利な活用法のひとつがデータ入力フォームの作成です。通常、データ入力フォームはVBAのユーザーフォームを使って作成しますが、プログラミングに抵抗がある方も多いのではないでしょうか。実は、VBAやユーザーフォームを使わずに、Excel標準機能だけで簡単にデータ入力フォームを作成できます。 この記事では、分かりやすい手順と画像付きで、その方法をご紹介します。 クイックアクセスツールバーに「フォーム」コマンドを追加する方法 まずは、今回使用するサンプルデータをご覧ください。ここでは、ベストセラー書籍の出版年と価格のデータセットを使用します。 Excelでデータ入力フォームを作成するには

  2. クラウドストレージとは?データの保存と転送におけるイノベーションを徹底解説

    人類は古来より、自らの脳細胞以外の外部媒体に頼って、情報を後世に伝えたり、大切な記憶を保存したりしてきました。湿った粘土や洞窟の壁への彫刻を用いていた初期のネアンデルタール人の時代から、ヒエログリフで情報を記録・伝達していた古代エジプト人の時代へ。おそらく、こうした人類に生まれつき備わった特性こそが、IT業界における記録媒体の進化を牽引してきたのでしょう。 1725年のパンチカードの時代から、フロッピーディスク、CDやDVD、ハードディスク、そしてついには「クラウド」という目に見えない存在まで、私たちは長い道のりを歩んできました。その大きな原動力となったのが、記録メディアが遂げた飛躍的な技術的