Agile育成ブログ
未来を変える喜びを
Django

Django form


Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490

フォームとは

フォームを作る前にまずはフォームとは何かについて、知っておきましょう。

GoogleやYahooなどの検索エンジンを例に考えてみましょう。

検索する単語を検索ウィンドウと呼ばれる文字入力フォームに入力をすると思います。

この文字入力フォームも、フォームの一部です。

他には様々なWebサービスでアカウントを作るときに、住所や年齢、電話番号などの個人情報を入力すると思います。

これらを入力する場所もフォームであると言えます。

これらのフォームでは住所の入力フォームには住所を、電話番号の入力フォームには電話番号を入力しなければなりません。

それらのチェックはバリデーションと呼ばれます。

バリデーションでは文法のチェックがされて、文法から外れたものは入力できない仕組みになっています。

このバリデーションは自分たちで定義する必要はなく、Djangoから提供されるクラスを使えば簡単に実装することができます。

プロフィールのフォームです。

サインアップのフォームです。

forms.pyの情報を引き継いで、views.pyファイルはtemplatesファイルを指定しています。

ProfileView

class ProfileView(LoginRequiredMixin, View):
    def get(self, request, *args, **kwargs):
        user_data = CustomUser.objects.get(id=request.user.id)

        return render(request, 'accounts/profile.html', {
            'user_data': user_data,
        })

class ProfileEditView(LoginRequiredMixin, View):
    def get(self, request, *args, **kwargs):
        user_data = CustomUser.objects.get(id=request.user.id)
        form = ProfileForm(
            request.POST or None,
            initial={
                'first_name': user_data.first_name,
                'last_name': user_data.last_name,
                'department': user_data.department
            }
        )

        return render(request, 'accounts/profile_edit.html', {
            'form': form
        })

    def post(self, request, *args, **kwargs):
        form = ProfileForm(request.POST or None)
        if form.is_valid():
            user_data = CustomUser.objects.get(id=request.user.id)
            user_data.first_name = form.cleaned_data['first_name']
            user_data.last_name = form.cleaned_data['last_name']
            user_data.department = form.cleaned_data['department']
            user_data.save()
            return redirect('profile')

        return render(request, 'accounts/profile.html', {
            'form': form
        })

SignupView

class SignupView(views.SignupView):
    template_name = 'accounts/signup.html'
    form_class = SignupUserForm

input type=”text”

inputタグにtype属性でtextの値を指定すると入力エリアを設置できます。

名前:<input type="text">

入力欄にテキスト表示

名前:<input type="text" placeholder="名字 名前">

ラジオボタン

<form action="example.php" method="post" name="contact-form">
        <input type="radio" name="gender" value="男"> 男
        <input type="radio" name="gender" value="女" checked=""> 女
        <input type="radio" name="gender" value="その他"> その他
    </form>
主な属性
属性用途
nameラジオボタンの名前
value送信される選択肢の値
cheacked最初から選択されている状態にするときに指定

チェックボタン

<form action="example.php" method="post" name="contact-form">
        好きな色:
        <input type="checkbox" name="color" value="赤" checked=""> 赤
        <input type="checkbox" name="color" value="青"> 青
        <input type="checkbox" name="color" value="黄"> 黄
        <input type="checkbox" name="color" value="緑"> 緑
    </form>
主な属性
属性用途
nameチェックボックスの名前
value送信される選択肢の値
cheacked最初から選択されている状態にするときに指定

送信ボタン

<form action="example.php" method="post" name="contact-form">
        <input type="submit" value="送信する">
    </form>

セレクトボックス

<form action="example.php" method="post" name="contact-form">
        血液型
        <select name="bloodtype">
            <option value="A">A</option>
            <option value="B">B</option>
            <option value="O">O</option>
            <option value="AB">AB</option>
            <option value="不明" selected="">不明</option>
        </select>
    </form>

You cannot copy content of this page