ランダムおすすめ記事

ホームページ作りました

python,django。関数でフォームを出力する。

今回は関数。 つまりpythonですと

def():
 フォームを作りたいよ~~~。

という形でフォームを作る方法を書こうと思います。 下の記事でclassを使った方法はすでに記載しました。 https://qiita.com/sr2460/items/a22770f357d8a24403ab



models.py、forms.py、htmlの書き方は上の記事を見てもらうとして、classですとこんな風に書いてフォームを作成していました。

class クラス名(CreateView):
    model = Post
    form_class = PostForm
    template_name = "使用したいテンプレート名"
    success_url = "リダイレクトするURL"  


これを関数で書くと、

from django.shortcuts import render, redirect

def form(request):
    form = PostForm(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        form.save()
        return redirect(アプリケーション名:リダイレクトしたいurlのname)


    context = {
        'form' :form
    }
return render(request, 'アプリケーション名'/テンプレート名.html', context)


切り取ってみていきましょう。

POSTでurlにアクセスされた場合(フォームは送信された場合)PostFormにrequest(入力内容)が送信されるよ。 POSTじゃない場合はNone(フォーム内は空でhtmlに出力されるよ)というニュアンスです。(なんかうまく説明できない)

   form = PostForm(request.POST or None)


もしrequestがPostならバリデーションをして(想定されていない型で送信された場合弾いてくれます)、form.save()で入力内容が保存されます。

    if request.method == 'POST' and form.is_valid():
        form.save()


フォームを送信した後に飛ぶurlの設定。

return redirect(アプリケーション名:リダイレクトしたいurlのname)


フォームを使用するhtmlをrenderで指定してcontectリストを使ってformの情報をhtmlで使えるようにします。

    context = {
        'form' :form
    }
return render(request, 'アプリケーション名'/テンプレート名.html', context)


これで関数部分の話は終わり!


クラスの場合urls.pyは

path('使いたいURL', views.クラス名.asview(),name='使いたい名前'),

ですが関数の場合は

path('使いたいURL', views.関数名,name='使いたい名前'),

という風に書きます。views.クラス名.asview()とviews.関数名という違いがありますね。 今回はこれで終わり。