flask wtforms, what input is pressed

euri10

Flask beginner here, bear with me please !

In this little piece of code I simplified for the question, I have for a defined route / with 2 forms : I'd like the add form to add things to the db and the delete form to delete things, simple.

However my issue is that in this code I can't differentiate which input button from the form is pressed as formadd.validate() and formdel.validate() both always return true.

How can I differentiate which submit button is pressed in order to manipulate the database accordingly ?

At first I wrote what is currently commented below, but obviously it doesn't work since the validate method returns true....

from flask import Flask, render_template, request
from flask.ext.sqlalchemy import SQLAlchemy
from wtforms import Form, StringField


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///botdb.db'
db = SQLAlchemy(app)

class BotFormAdd(Form):
    botname = StringField('bot name')
    botdescription = StringField('bot description')


class BotFormDelete(Form):
    botid = StringField('bot id')


@app.route('/', methods=['GET', 'POST'])
def index():
    formadd = BotFormAdd(request.form)
    formdel = BotFormDelete(request.form)
    if request.method == 'POST':
        print(formadd.validate(), formdel.validate())
    # if request.method == 'POST' and formadd.validate():
    #     print('in formadd')
    #     bot = Bot(name=formadd.botname.data, description=formadd.botdescription.data)
    #     db.session.add(bot)
    #     db.session.commit()
    #     return redirect(url_for('index'))
    # if request.method == 'POST' and formdel.validate():
    #     print('in formdel')
    #     db.session.delete(formdel.botid.data)
    #     db.session.commit()
    #     return redirect(url_for('index'))
    return render_template('index.html', title='Home', formadd=formadd, formdel=formdel)


if __name__ == '__main__':
    app.run(debug=True)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>this is a test</title>

</head>
<body>
<form method=post action="/">
  <dl>
    {{ formadd.botname }}
    {{ formadd.botdescription }}
  </dl>
  <p><input type=submit name='add' value='add this'>
</form>
<form method=post action="/">
  <dl>
    {{ formdel.botid }}
  </dl>
  <p><input type=submit name='delete' value='delete this'>
</form>
</body>
</html>
Doobeh

There's lots of ways of doing this, but it breaks down into two categories-- either you indicate it via the route, or via an element on a form.

Most people would just add separate routes:

@app.route('/delete-bot/', methods=['post'])
def delete_bot():
    form = BotFormDelete()
    if form.validate():
        delete_bot(id=form.botid.data)
    flash('Bot is GONE')
    return redirect(url_for('index'))

So your delete form would submit to that route, get processed and sent back to index.

<form method='post' action='url_for('delete_bot')>

And you'd have a different route for adding a bot.

Alternatively you could check what type of form it was from it's contents. E.g.

if request.form.get('botid'):
    # it has a botid field, it must be a deletion request
    form = BotFormDelete()
    form.validate()
    delete_bot(form.botid.data)
else:
    form = BotFormAdd()
    ....

But that way seems like it would get messy quickly.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Flask, MongoEngine, WTForms - errors on form rendering

분류에서Dev

Flask WTForms에서 Javascript가있는 로더

분류에서Dev

Flask WTForms 및 for 루프로 필드 생성

분류에서Dev

Flask WTForms 필드에 HTML 태그 포함

분류에서Dev

<input type = "time">에 해당하는 WTForms

분류에서Dev

Flask-WTF / WTForms로 Flask에 취소 버튼 추가

분류에서Dev

Flask는 NaN을 반환하는 Integerfield ()를 wtforms

분류에서Dev

AJAX로 채워진 FlaskForm (Flask-WTForms) SelectField 유효성 검사

분류에서Dev

How do I make my flask wtforms SelectField look like a dropdown?

분류에서Dev

Flask-WTForms : 동적으로 이름 및 ID 속성 생성

분류에서Dev

How can I set a NSTimer based on what button is pressed?

분류에서Dev

input vs .net texbox: input clears on enter pressed, asp:textbox does not

분류에서Dev

Python Flask WTForms : "유효하지 않은 선택"을 반환하는 동적 SelectField

분류에서Dev

Flask WTForms를 사용하여 다중 선택 옵션을 만드는 방법

분류에서Dev

flask-wtf wtforms에서 다양한 필드 유형을 결합하는 방법

분류에서Dev

Flask / Python / WTForms 유효성 검사 및 동적으로 SelectField 선택 설정

분류에서Dev

Godot Input.is_action_pressed가 작동하지 않습니다.

분류에서Dev

How do I set initial default input fields, prior to "Add Property" being pressed?

분류에서Dev

다음 양식 필드로 이동하기 위해 jQuery를 사용하는 Flask-WTForms

분류에서Dev

Flask WTForms-여러 양식 필드를 기반으로하는 사용자 지정 유효성 검사기

분류에서Dev

웹 애플리케이션 : Flask-html-wtforms : 두 개의 제출 버튼이있는 양식

분류에서Dev

Flask-WTForms의 두 날짜 필드를 비교하기위한 필드 유효성 검사

분류에서Dev

Flask / WTForms-양식을 인라인으로 만들려면 어떻게해야합니까?

분류에서Dev

Flask WTForms 새 입력은 제출시 미리 채워진 데이터를 덮어 쓰지 않습니다.

분류에서Dev

SQLAlchemy가있는 Flask WTForms : 데이터베이스에 양식을 저장할 때 UnmappedInstanceError

분류에서Dev

wtforms 및 flask-sqlalchemy의 데이터베이스 쿼리에서 선택 사항 가져 오기

분류에서Dev

Flask, WTForms : _temporarily_ 숨김 형식으로 StringField를 만드는 방법이 있습니까?

분류에서Dev

flask-wtforms에서 한 페이지에 두 가지 형태의 동일한 클래스

분류에서Dev

Flask-WTForms 양식에서 동일한 양식으로 다시 리디렉션의 확인란 값 전달

Related 관련 기사

  1. 1

    Flask, MongoEngine, WTForms - errors on form rendering

  2. 2

    Flask WTForms에서 Javascript가있는 로더

  3. 3

    Flask WTForms 및 for 루프로 필드 생성

  4. 4

    Flask WTForms 필드에 HTML 태그 포함

  5. 5

    <input type = "time">에 해당하는 WTForms

  6. 6

    Flask-WTF / WTForms로 Flask에 취소 버튼 추가

  7. 7

    Flask는 NaN을 반환하는 Integerfield ()를 wtforms

  8. 8

    AJAX로 채워진 FlaskForm (Flask-WTForms) SelectField 유효성 검사

  9. 9

    How do I make my flask wtforms SelectField look like a dropdown?

  10. 10

    Flask-WTForms : 동적으로 이름 및 ID 속성 생성

  11. 11

    How can I set a NSTimer based on what button is pressed?

  12. 12

    input vs .net texbox: input clears on enter pressed, asp:textbox does not

  13. 13

    Python Flask WTForms : "유효하지 않은 선택"을 반환하는 동적 SelectField

  14. 14

    Flask WTForms를 사용하여 다중 선택 옵션을 만드는 방법

  15. 15

    flask-wtf wtforms에서 다양한 필드 유형을 결합하는 방법

  16. 16

    Flask / Python / WTForms 유효성 검사 및 동적으로 SelectField 선택 설정

  17. 17

    Godot Input.is_action_pressed가 작동하지 않습니다.

  18. 18

    How do I set initial default input fields, prior to "Add Property" being pressed?

  19. 19

    다음 양식 필드로 이동하기 위해 jQuery를 사용하는 Flask-WTForms

  20. 20

    Flask WTForms-여러 양식 필드를 기반으로하는 사용자 지정 유효성 검사기

  21. 21

    웹 애플리케이션 : Flask-html-wtforms : 두 개의 제출 버튼이있는 양식

  22. 22

    Flask-WTForms의 두 날짜 필드를 비교하기위한 필드 유효성 검사

  23. 23

    Flask / WTForms-양식을 인라인으로 만들려면 어떻게해야합니까?

  24. 24

    Flask WTForms 새 입력은 제출시 미리 채워진 데이터를 덮어 쓰지 않습니다.

  25. 25

    SQLAlchemy가있는 Flask WTForms : 데이터베이스에 양식을 저장할 때 UnmappedInstanceError

  26. 26

    wtforms 및 flask-sqlalchemy의 데이터베이스 쿼리에서 선택 사항 가져 오기

  27. 27

    Flask, WTForms : _temporarily_ 숨김 형식으로 StringField를 만드는 방법이 있습니까?

  28. 28

    flask-wtforms에서 한 페이지에 두 가지 형태의 동일한 클래스

  29. 29

    Flask-WTForms 양식에서 동일한 양식으로 다시 리디렉션의 확인란 값 전달

뜨겁다태그

보관