복붙노트

[PYTHON] 양식 전송 오류, 플라스크

PYTHON

양식 전송 오류, 플라스크

두 개의 이있는 양식이 있습니다. 하지만 그것을 보낼 때 두 번째 제출 오류가 발생합니다.

형세:

<form action="{{ url_for('index') }}" method="post">
    <input type="submit" name="add" value="Like">
    <input type="submit" name="remove" value="Dislike">
</form>

main.py:

...
if request.method == 'POST':
    if request.form['add']:
        return redirect(url_for('index'))
    elif request.form['remove']:
        return redirect(url_for('index'))
...

먼저 제출 (추가)하면 제대로 작동하지만 두 번째 (제거) ... :

이 오류를 어떻게 해결할 수 있습니까?

UPD :

그것은 아주 간단했다 : request.form은 ImmutableMultiDict를 반환합니다.

... 
if 'Like' in request.form.values():
     ...
elif 'Dislike' in request.form.values():
     ...

해결법

  1. ==============================

    1.@Blubber가 지적했듯이 Flask는 args와 form dictionary에서 키를 찾지 못하면 HTTP 에러를 발생시킵니다. Flask가 기본적으로 가정하는 것은 특정 키를 요구하는 경우 해당 키가 없으면 요청에서 아무 것도 나오지 않아 전체 요청이 유효하지 않다는 것입니다.

    @Blubber가 지적했듯이 Flask는 args와 form dictionary에서 키를 찾지 못하면 HTTP 에러를 발생시킵니다. Flask가 기본적으로 가정하는 것은 특정 키를 요구하는 경우 해당 키가 없으면 요청에서 아무 것도 나오지 않아 전체 요청이 유효하지 않다는 것입니다.

    당신의 상황을 다루는 다른 두 가지 좋은 방법이 있습니다 :

  2. ==============================

    2.request.form dict에 'add'및 'remove'키가 있는지 확인해야합니다.

    request.form dict에 'add'및 'remove'키가 있는지 확인해야합니다.

    if request.method == 'POST':
        if 'add' in request.form:
            return redirect(url_for('index'))
        elif 'remove' in request.form:
            return redirect(url_for('index'))
    

    Like를 클릭하면 첫 번째 조건이 충족되어 두 번째 항목이 확인되지 않으므로 실패하지 않습니다. 그러나 Dislike 버튼을 클릭하면 request.form에 'add'라는 키가 없으므로 첫 번째 조건은 KeyError 예외를 throw합니다.

  3. from https://stackoverflow.com/questions/8552675/form-sending-error-flask by cc-by-sa and MIT license