2

私はdjangoを学び始め、フォームの作成方法に関するチュートリアルを見始めました。フォームがこのように作成される場所をたくさん見てきました。

def create(request):
    if request.POST:
        form = ArticleForm(request.POST)
        if form.is_valid:
            form.save()
   else:
       form = ArticleForm()
   args = {}
   args.update(csrf(request))
   args['form'] = form
   return render_to_response('create_article.html', args)

ここで、Article というモデルを作成し、そのモデルから ArticleForm を作成したと仮定すると、ここ (上記で提供したコード) で何が行われているのでしょうか? if form.is_valid: form.save() 部分を理解しています。私が読んだところによると、リクエストは常に最初のパラメーターである必要がありますが、パラメーターとしてのリクエストと関数の最初の2行が何であるかを誰かが説明できますかしてる?そして、else ステートメント内と、else ステートメントの後 (args 部分) では、正確には何が行われているのでしょうか?

編集: また、Article モデルに name = models.CharField(max_length=20) というフィールドがあるとします。ユーザーがフォームの特定のセクションに入力した内容を取得/アクセスする方法はありますか? 名前を取得し、その名前がデータベースに既に存在するかどうかを確認したいとします。それを行う方法はありますか?

4

3 に答える 3

2

GET や POST などのHTTP メソッドに精通していることを願っています。

requestオブジェクトは、任意のユーザー エージェントによる単一の要求を表します。そのため、特定のページを閲覧したときにブラウザから送信されたリクエスト、または検索エンジンのクローラーから送信されたリクエストである可能性があります。リクエストについて詳しくはこちら

request.POSTはこのrequestオブジェクトの属性であり、QueryDict です(通常の Python dict によく似ています)。これには、ビューに送信される HTTP POST パラメーターが含まれています。

あなたの例では要するに:

def create(request):
    if request.POST:  # check if the request is POST request and it contains any parameter  
        form = ArticleForm(request.POST)  # then pass all those parameters to the form
        if form.is_valid:  # process the form to check if it's valid
            form.save()  # save the data if it's valid
        else:
            form = ArticleForm()  # if not valid data, initialize an new / empty form
    args = {}  # create a dict to pass to the template
    args.update(csrf(request))  # add the CSRF token
    args['form'] = form  # add the 'form' above to the 'args' dict
    return render_to_response('create_article.html', args)  # pass that dict to template

なぜこの例があるのか​​ よくわかりません。通常、最後の部分は次のようにします。

def create(request):
    .... your code ....
    else:
        form = ArticleForm()
    return render(request, 'create_article.html', { form: form })

それが役に立てば幸い。

于 2013-07-28T20:51:38.653 に答える