파이썬 flask 405오류
조회수 2255회
index.html
{% for obj in data_list%}
<!-- single item -->
<div class="item my-3">
<h5 class="item-name text-capitalize">{{obj.contents}}</h5>
<div class="item-icons">
<a href="{{url_for('delete')}}" name="id" value="{{obj._id}}" class="delete-item item-icon">
<i class="far fa-times-circle"></i>
</a>
</div>
</div>
<!-- end of single item -->
{% endfor %}
list.py
@app.route('/delete', methods=['POST'])
def delete():
idx=request.values.get('id')
db.delete_todo(idx)
return '''
<script>
alert("삭제되었습니다")
location.href="."
</script>
'''
db.py
def delete_todo(idx):
conn = mongodb.get_conn()
conn.delete_one({"_id":idx})
index.html에서 a태그 있는곳을 클릭하면 db.py에서 데이터를 삭제하고 화면에서 없애는 연산을 하고 싶은데 a태그를 클릭하면 The method is not allowed for the requested URL.이런 405오류가 나옵니다. 디비는 몽고디비를 썼어요.
어디가 잘못된걸까요? 혼자 구글링하면서 공부하니 쉬운것 같은데도 막히네요ㅜㅜ
1 답변
-
HTTP 405
는 "그런 메소드로 처리할 방법이 없다"는 의미입니다. 질문자님의 코드는POST
메소드로/delete
를 요청할 수 있게 되어 있지만 정작 버튼을 누를 때는GET /delete
를 요청하도록 되어 있어요.a
태그는GET
요청을 처리하기 때문이지요. 그러니 정당한 오류인405
가 반환되는 거구요.가장 단순 무식한 핫픽스는 이런 식이 됩니다.
<form action="POST" action="{{ url_for('delete') }}"> <input type="hidden" name="id" value="{{ obj._id }}" /> <button type="submit" class="delete-item item-icon"> <i class="far fa-times-circle"></i> </button> </form>
핵심은 POST 요청을 보낼 수 있는 방법을 찾아서 그 방법으로
/delete
를 요청해야 한다는 겁니다. 좀더 잘 만들면 예컨대 이런 스크립트가 동원이 되겠죠.$('body').on('click', '.delete-item', function () { $.ajax({ type: 'POST', url: '/delete', data: {id: obj._id} }); });
이해가 되신다면 잘 응용해 보셔요.
댓글 입력