2017-04-13 3 views
0

私は招待状を表示したいと思います。フォームを作成しましたが、url/invitations/requestに行くと、無効なブロックがフォームのテンプレートではなく表示されます。理由は何でしょうか?私が思う無効なフォームブロックがレンダリングされます

enter image description here

url(r'^request/$', requestInvitation, name='request-invitation'), 

@csrf_exempt 
def requestInvitation(request): 
    form = InviteForm(request.POST or None) 
    response_data = {} 
    if form.is_valid(): 
     join = form.save(commit=False) 
     email = form.cleaned_data.get('email') 
     already_join, created = Invitation.objects.get_or_create(email=email) 
     if created: 
      already_join.invite_code = get_invite_code() 
      already_join.save() 
      response_data['result'] = "Thank you for your interest" 
      response_data['email'] = email 
      print ('response_data', response_data) 
     return HttpResponse(json.dumps(response_data),content_type="application/json") 
    else: 
     return HttpResponse(json.dumps({'result': 'Error message'})) 
     # return HttpResponseRedirect('/') 
    context = {"form": form} 
    return render(request, 'invitation/invitation.html', context) 

<form method="POST" class="invitation-form vcenter" action="."> 
       {% csrf_token %} 
       <div class="ui action input"> 
       <input type="email" class="requested_email" name="email" placeholder="Email address"> 
       <button class="ui button primary">Request Invite</button> 
       </div> 
</form> 

答えて

0

、あなたはPOST呼び出しを分離する必要があります。リクエストメソッドがPOSTかどうかをチェックする必要があります。このような何か:ここ

if request.method == 'POST': # If the form has been submitted... 
    response_data = {} 
    if form.is_valid(): 
     join = form.save(commit=False) 
     email = form.cleaned_data.get('email') 
     already_join, created = Invitation.objects.get_or_create(email=email) 
     if created: 
     already_join.invite_code = get_invite_code() 
     already_join.save() 
     response_data['result'] = "Thank you for your interest" 
     response_data['email'] = email 
     print ('response_data', response_data) 
     return HttpResponse(json.dumps(response_data),content_type="application/json") 
    else: 
     return HttpResponse(json.dumps({'result': 'Error message'})) 
    # return HttpResponseRedirect('/') 

else: 
    # An unbound form 
0

は、あなたのrequestのワークフローです:。GET要求が行われ

  1. は(あなただけ/invitations/requestを訪問しているので、request.POSTが空{}ある

  2. form = InviteForm(request.POST or None)。したがって、InviteFormは無効です。

  3. if form.is_valid():は、Falseです。

  4. else: return HttpResponse(json.dumps({'result': 'Error message'}))。したがって、else句が実行され、テンプレートに表示されているJSON応答が返されます。

今、解決のために:

@csrf_exempt 
def requestInvitation(request): 
    form = InviteForm() 
    response_data = {} 
    if request.method == 'POST': 
     # This is a POST request, so request.POST will not be {} 
     form = InviteForm(request.POST) 
     if form.is_valid(): 
      join = form.save(commit=False) 
      email = form.cleaned_data.get('email') 
      already_join, created = Invitation.objects.get_or_create(email=email) 
      if created: 
       already_join.invite_code = get_invite_code() 
       already_join.save() 
       response_data['result'] = "Thank you for your interest" 
       response_data['email'] = email 
       print ('response_data', response_data) 
       return HttpResponse(json.dumps(response_data),content_type="application/json") 
     else: 
      return HttpResponse(json.dumps({'result': 'Error message'})) 

    context = {'form': form} 
    return render(request, 'invitation/invitation.html', context) 
関連する問題