21141


現在、勉強の一環としてDjangoで検索フォームを実装しようとしておりますが  
htmlからの get/post リクエストの受け取り方が多数見受けられ、どのように書くのが無難なのか分からないため質問させていただきました。

html(抜粋)

[code]

    <form class="navbar-form navbar-right" role="search" method="GET">
            <div class="form-group">
              <input type="text" class="form-control" value="" name="search" placeholder="Search">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
    </form>
[/code]

このhtmlからのリクエストの受け取りの際

[code]

    d = {
            'name':request.GET.get('search')
        }
    
[/code]

としたのですが、調べてみると

[code]

    query = request.GET.get('q', '')
    
[/code]

や formを使った

[code]

    class SearchForm(forms.Form):
        q = forms.CharField(label="キーワード")
    
    form = SearchForm(request.GET) 
    
[/code]

これらの違い、利点が分からないため教えていただけないでしょうか

d = の内部を name = request.GET('search') としたらエラーを吐いてしまいました。


CC BY-SA 3.0
2016-01-20T13:54:54.227
21134
2016-01-21T01:16:13.910
14082
question
python html django
django で request の受け取り方が分からない


マニュアルには

> フォームによって提出 (submit) されたデータの処理は、Django の HttpRequest クラスだけでも実現できます。  
>  しかし、フォー
> ムライブラリを使うと、フォーム処理に必要な共通のタスクの面倒を見てくれます。フォームライブラリを使えば、以下のようなことを実現できます:
>
>   1. フォームウィジェットから、 HTML フォームを自動的に生成して表示できます。
>   2. 提出されたデータに対して、バリデーション規則 (validation rule) を適用できま す。
>   3. バリデーションエラーを検出したときに、フォームをエラーメッセージ付きで表示で きます。
>   4. 提出されたデータを、適切な Python のデータ型に変換できます。
>

[フォームの操作 — Django 1.4
documentation](http://docs.djangoproject.jp/en/latest/topics/forms/)

とあります。

`request.GET` だけでも良いけど、 毎回同じコードを書いているな、と思ったら、`forms.Form` を使う方が良いと思います。

特に django の model と対応する form を使っている時は便利です。


CC BY-SA 3.0
2016-01-21T01:16:13.910
21141
2016-01-21T01:16:13.910
7471
21134
answer