2016-05-23 2 views
0

я работаю на веб-службы с помощью Django и Python, у меня есть проблема с маркером CSRF, это мой HTML-код:Django сессий переменные

  {% for f in resultat %} 
        <div class="box"> 


         <BR> 
         <div class="row uniform 50%"> 
          <div class="6u 12u(mobilep)"> 
           {{ f.typeposte }} 
          </div> 
         </div> 
         <BR> 
         <div class="row uniform 50%"> 
          <div class="6u 12u(mobilep)"> 
           {{ f.diplome }} 
          </div> 
         </div> 
         <BR> 
         <div class="row uniform 50%"> 
          <div class="6u 12u(mobilep)"> 
           {{ f.niveau }} 
          </div> 
         </div> 
         <BR> 
         <div class="row uniform 50%"> 
          <div class="6u 12u(mobilep)"> 
           {{ f.duree }} 
          </div> 
         </div> 
         <BR> 
         <div class="row uniform 50%"> 
          <div class="6u 12u(mobilep)"> 
           {{ f.commentaire }} 
          </div> 
         </div> 
       <div class="box"> 
       <form class="form_app" action="/apply" method="post"> 
       {% csrf_token %} 
       <div class="row uniform 50%"> 
        <div class="6u 12u(mobilep)"> 
         {{form_app.apply}} 
        </div> 
        <input type="hidden" name="title" value="ouf"> 
       </div> 
       <div class="row uniform"> 
        <div class="12u"> 
         <ul class="actions align-center"> 
          <li><input type="submit" value="OK"/></li> 
         </ul> 
        </div> 
       </div> 
       </form> 
      </div> 

и я имел функцию:

Я хочу отобразить «этапы» и когда клиент клик на «Je postule», а затем в OK, он отображает страницу html, где клиент может написать свое письмо о мотивации, поэтому проблема заключается в том, OK он отображает мне ошибку: Запрещено (403) Ошибка CSRF. Запрос прерван.

Я гавань понять, почему так боярышник я могу сделать, или есть другое решение, чтобы получить идентификатор стадии без использования переменных сессий

первый взгляд:

def get_stage_by_motcle(request): 
    user=request.user 
    if user and user.is_active: 
     if request.method == 'POST': 
      form = Form_resultat(request.POST) 
      if form.is_valid(): 
       m = form.cleaned_data["mot"] 
       mtc=motcle(motcle=m) 
       mtc.save() 
       query=motcle.objects.all().filter(motcle=mtc) 
       queryset=eStage.objects.all().filter(mot=query) 
       form_app = Form_apply() 
       return render_to_response('resultat_by_mot.html', {'resultat': queryset,'form_app':form_app}) 
      else: 
       form = Form_resultat(request.POST) 
       return render(request, 'get_by_mot.html', {'form': form}) 
     else: 
      form = Form_resultat(request.POST) 
      return render(request,'get_by_mot.html',{'form': form}) 
    else: 
     return redirect('/home') 

его функцией, кто отобразить атрибут каждой ступени, я хочу, чтобы восстановить идентификатор каждого этапа, чтобы использовать его в функции «применить»

+0

Либо функция, которой вы поделились, это не представление, отображаемое ниже html-кода, либо вы не добавили полный вид. Чего-то не хватает. Пожалуйста, добавьте свой полный вид, который отображает связанный файл html. – alix

+0

О, да, я обновляю его сейчас :) – sarra

ответ

0

ОК. Не тестировал ваш код. Но похоже, что вы столкнулись с этой ошибкой csrf, потому что вы отправляете форму Form_apply после обработки Form_resultat формуляра в same view и том же request. Опять же, поскольку я не тестировал ваш код, я не уверен в этом решении. Но стоит попробовать:

Создайте другой URL:

# other urls... 
url(r'^form-apply/(?P<mtc_id>[0-9]+)', 'form_apply_view', name='form_apply_view'), 

и создать соответствующий вид:

def form_apply_view(request, mtc_id): 
    query=motcle.objects.all().filter(pk=mtc_id) 
    queryset=eStage.objects.all().filter(mot=query) 
    form_app = Form_apply() 
    return render_to_response('resultat_by_mot.html', {'resultat': queryset,'form_app':form_app}) 

И ваш новый get_stage_by_moctle вид может быть как:

def get_stage_by_motcle(request): 
    user=request.user 
    if user and user.is_active: 
     if request.method == 'POST': 
      form = Form_resultat(request.POST) 
      if form.is_valid(): 
       m = form.cleaned_data["mot"] 
       mtc=motcle(motcle=m) 
       mtc.save() 
       # redirect to your new url to render new form with saved object data... 
       return redirect('form_apply_view', mtc_id=mtc.id) 
      else: 
       form = Form_resultat(request.POST) 
       return render(request, 'get_by_mot.html', {'form': form}) 
     else: 
      form = Form_resultat(request.POST) 
      return render(request,'get_by_mot.html',{'form': form}) 
    else: 
     return redirect('/home') 

Я не видел ничего плохого в вашем коде, кроме этого. Поэтому попробуйте этот подход и сообщите мне, работает ли он.