2016-10-01 3 views
0

연습 사이트에서 광고 목록을 찾아 볼 수있는 페이지를 렌더링하고 있습니다. '찾아보기'페이지에는 3 개의 양식이 있고, 2 개는 선택 필드이고 다른 하나는 텍스트 필드입니다. 선택 필드는 사용자가 위치 또는 트랜잭션 유형을 변경할 수있게하며, 텍스트 필드는 사용자가 위치를 찾거나 변경하는 것을 허용합니다. 나는이 순수 HTML을하고 flask-wtf를 사용하지 않기를 원했습니다. 위치를 바꿀 수있는 부분을 성공적으로 만들었지 만 다른 옵션의 코드를 추가하자마자 코드가 깨져서 400 개의 잘못된 요청 오류이 발생합니다. 변경 항목 및 거래 유형에 대한 양식을 추가 할 때 이것이 왜 작동하지 않는지에 대한 제안이나 지침이 있습니까?python-flask html form 도움말/제안

@app.route('/find-it/', methods=['GET','POST']) 
def browse(): 
    try: 

    location = session.get('location', None) 
    transType = session.get('transType', None) 
    item = session.get('item', None)   

    data = browseQuery() 

    if request.method == 'POST': 
     if request.form['changeLocation'] != '': 
      print('location changed') 
      location = request.form['changeLocation'] 
      session['location'] = location 
      return redirect(url_for('browse', location=location)) 
     elif request.form['changeType'] != '': 
      print('type changed') 
      transType = request.form['changetype'] 
      session['transType'] = transType 
      return redirect('browse', transType=transType) 
     else: 
      if request.form['changeItem'] != '': 
       print('item changed') 
       item = request.form['changeItem'] 
       session['item'] = item 
       return redirect(url_for('browse', item=item)) 

     return render_template('all-classifieds.html',location=location,transType=transType, data=data) 
except Exception as e: 
    return (str(e)) 

HTML :

<form method="post" id="changeLocation" name="changeLocation" action=""> 

        <select name="changeLocation" id="changeLocation" style="margin-right: 5%; float: left;"> 
         <optgroup label="Where?"> 
          <option selected style="display:none;color:#eee;"></option> 
          <option>option 1</option> 
          <option>option 2</option> 

         </optgroup></select></form> 


<button type="submit" id="submit" form="changeLocation" style="padding: 0 3px; float:left;" 
         class="btn btn-info btn-sm"> 
        <i class="glyphicon glyphicon-search"></i> 
       </button> 




<form method="post" name="changeType" id="changeType"> 


        <select name="changeType" id="changeType" style="margin-right: 5%; float: left;"> 
         <optgroup label="..."> 
          <option selected style="display:none;color:#eee;"></option> 
          <option>option 1</option> 
          <option>option 2</option> 
          <option>option 3</option> 

         </optgroup> 
        </select> 



<form method="post" name="changeType" id="changeType"> 


        <select name="changeType" id="changeType" style="margin-right: 5%; float: left;"> 
         <optgroup label="Look for things that are..."> 
          <option selected style="display:none;color:#eee;"></option> 
          <option>asdf</option> 
          <option>asdfasdf</option> 
          <option>asdfasdfasdf</option> 

         </optgroup> 
        </select></form> 

<button type="submit" id="submit" form="changeType" style="padding: 0 3px; float:left;" 
         class="btn btn-info btn-sm"> 
        <i class="glyphicon glyphicon-search"></i> 
       </button> 


<form method="post" name="changeItem" id="changeItem"> 
        <input type="text" name="changeItem" value="" id="changeItem" placeholder=""/> 
       </form> 

<button type="submit" id="submit" form="changeItem" style="padding: 0 3px; float:left;" 
         class="btn btn-info btn-sm"> 
        <i class="glyphicon glyphicon-search"></i> 
       </button> 
+0

로 다시 작성할 수 있습니다 왜 디버그 = 사실은, 당신은 실제 오류가 무엇인지 볼 수 있습니다 사용하지 않는? –

+0

그래서 새로운. 나는 debug = True를 가지고있다. 나는 그것을 사용하는 방법을 모르겠습니다. @DanielRoseman 나는 추적 페이지를 얻지 못한다. 그것은 단지 내가 제출할 때 페이지에 400 나쁜 요청을 말합니다 그리고 그게 전부입니다 – user3344239

+0

'GET'요청을 받았을 때 페이지 로딩을 처리 할 코드가 있습니까? 'POST'에 대한 코드를 보았습니다. 더 이상 보이지 않는 것이 있습니까? – coralvanda

답변

1

당신에 대한 질문 문제 :

당신은 아마 특정 양식을 사용하는지 확인하려고

if request.form['changeLocation'] != '': 

으로. 문제는 다음과 같습니다. 올바른 양식을 사용한 경우이 검사는 작동하지만 다른 양식을 사용한 경우 request.form 사전에 키 오류가 발생합니다. 그러나 정상적인 것은 아닙니다 KeyError. 플라스크는 "특별"오류를 400 Bad Request으로 변환합니다. ,이

이 줄은

render_template('all-classifieds.html',location=location,transType=transType, data=data) 

작동하지 않습니다 : 특정 키 형태로 데이터에 존재하는 경우

if "changeLocation" in request.form: 
    # you can use request.form["changeLocation"] here 
elif "changeType" in request.form: 
    # here request.form["changeType"] is present 
... 

는 또 다른 문제는 in 운영자

를 사용 확인하려면 locationtransTypeifb에 정의되어 있기 때문에 자물쇠. 블록이 실행되지 않으면 실패합니다. 다른

뭔가 :

else: 
    if condition: 
     do_something 

elif condition: 
    do_something 
+0

감사합니다, @ Wombatz – user3344239