2017-04-13 6 views
0

Ich möchte ein Formular für die Einladung anzeigen. Ich habe ein Formular erstellt, aber wenn ich auf die URL/Einladungen/Anfrage gehe, wird der ungültige Block nicht die Vorlage mit Formular angezeigt. Was könnte der Grund sein?ungültiger Formularblock wird gerendert

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> 

Antwort

0

Ich denke, müssen Sie den POST Anruf trennen. Ich meine, Sie müssen überprüfen, ob die Anfrage-Methode POST ist oder nicht. Etwas wie folgt aus:

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

Hier ist der Arbeitsablauf für die request.

  1. A GET Anfrage wird (Sie nur /invitations/request Besuch So request.POST ist eine leere {}

  2. . form = InviteForm(request.POST or None). Somit ist die InviteForm nicht gültig

  3. if form.is_valid(): ist False.

  4. else: return HttpResponse(json.dumps({'result': 'Error message'})). Daher wird die else-Klausel ausgeführt, die eine JSON Antwort zurückgibt, die Sie in Ihrer Vorlage anzeigen.

Nun, für die Lösung:

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