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

html(抜粋)

<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>

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

d = {
        'name':request.GET.get('search')
    }

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

query = request.GET.get('q', '')

や formを使った

class SearchForm(forms.Form):
    q = forms.CharField(label="キーワード")

form = SearchForm(request.GET) 

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

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