スポンサーリンク

【Django】「forms.py」で入力欄の入力文字を変数として取得する方法。

Django
スポンサーリンク

今回の記事はDjangoのプロジェクトファイルの「form.py」で入力欄を作成し、入力された文字列を変数として取得する方法についてご紹介します。

今回作成するサンプルアプリのルールとユーザー名入力と入力文字をhtmlで表示までは以前の記事のこちらからご参照の程よろしくお願いいたします。


今回はさらにユーザ名の取得を高度にするため(入力されていないと入力してください等のエラーメッセージ入れたり)に、「forms.py」を用いて「form」の操作を行う方法を紹介していきます。

スポンサーリンク

「forms.py」の使い方

まずforms.pyとは何かというところなのですが実際に何かと言われると困るのですが、端的に書くとDjango内の入力欄内の情報(例えば文字数、型等)を一つのファイルにまとめて格納することでwebフォームの管理をしやす異様にしているのではないでしょうか。そのまとまったファイルをimportするだけでviews.pyから操作もできますし、htmlに表示させることもできます。こういった便利な機能ですのでぜひ使えるようになっていきましょう。

まず、forms.pyに書く内容に関してですが、下記を記述ください

さて具体的にどこを変更したかですがまずforms.pyにかきを記入。

from django import forms

class playerForm(forms.Form):
     player1 = forms.CharField()
     player2 = forms.CharField()
     player3 = forms.CharField()

上記コードの解説ですが私も詳しくわかっているわけではないのですが名前の記述ということで変数をplayer1~3と記載しDjangoのformsクラスからformsを使えるようにimportして、型をCharFieldと記載しています。
これでforms側は完成。

「forms.py」の使い方

htmlの変更点

次にこのforms.pyに記入したものをhtmlに反映させるためにindex.htmlを編集。

<!DOCTYPE html>
{% load static %}
<html lang="ja">
<head>
    <meta charset="utf-8" />
    <title>きのこがりゲーム</title>
</head>

<body>
    <div>
    <form action="{% url 'move_to_gamepage' %}" method="GET">
        <br>
        {{ form.as_p }} 
        <hr>
        <input type="image" src="{% static "ap/image/button/start_button.png" %}" name="start_button"> 
    </form>
    </div>
</body>
</html>

表示されるWebページ内の入力欄はもともとの形と変わりないですが変更点として<form>で記載していた箇所を全て{{ form.as_p }}として記載しています。ちなみに表示のさせ方は色々あるそうですので気になるかたは調べてみてください。
今回は全て表示させる、form.as_pという記述で書いております。これで値を入力して次のページの{{ player2 }}などの変数に値が含まれるようになっております。

「views.py」の変更点

最後にどのようにviews.pyを変更するかですが、入力欄に値が入っていないかどうかの判定に関してはform.is_valid()という便利な機能があります。
これをIf文で記載すればまさに日本語で言うと「もしformに値が入力されていれば〜」と言う記述になります。

これを使って下記のように変更します。その際、formのimportとforms.py内のclassのインポートもお忘れなく。

from django.shortcuts import render
from .forms import playerForm
from . import forms


def index_show(request):
    form = playerForm()
    return render(request,'index.html',{
        'form': form,
    }) 


def move_to_gamepage(request):
    form = forms.playerForm(request.GET or None)
    if form.is_valid():
        players = {
            'player1': request.GET.get('player1'),
            'player2': request.GET.get('player2'),
            'player3': request.GET.get('player3'),
        }
    
    return render(request, 'gamepage.html', players)

ここまで行けばまずは同様ページにアクセスhttp://127.0.0.1:8000

見辛いですが下記のようになっていれば大丈夫です。

クリックすると移動後のページにその名前が表示されているはずです。

次はページの装飾に関してcssほぼ初心者があれこれDjangoでやってみた記事に関してこちらで紹介していますのでご参照ください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Django
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

  1. […] 続きはformsでさらに高度な入力フォーマットの作成を行なっていきます。こちらの記事からご参照ください。「Djangoでformを使って入力欄を作り変数として格納させる方法【Djangoでカード… 」 […]

  2. […] 続きはformsでさらに高度な入力フォーマットの作成を行なっていきます。こちらの記事からご参照ください。「Djangoでformを使って入力欄を作り変数として格納させる方法【Djangoでカード…」 […]

タイトルとURLをコピーしました