繁体   English   中英

Flask - 405 Method not allowed with methods=['GET, POST']

[英]Flask - 405 Method not allowed with methods=['GET, POST']

bp_booking = Blueprint('booking', __name__, url_prefix='/booking', template_folder='templates/booking')

@bp_booking.route('<screening>',  methods=["GET", "POST"])
def seat_select(screening):
    cur = db.connection.cursor()
    cur.execute("""SELECT M.title, S.Screening_Start
                    FROM screening S JOIN movie M ON s.movie_id = M.id
                    WHERE S.id = (%s)""", (screening,))
    screening_details = cur.fetchone()
    title = screening_details[0]
    time = screening_details[1].strftime('%d %B  %H:%M')
    cur.execute("""SELECT A.row_count, A.column_count
                    FROM auditorium A JOIN screening S on S.auditorium_id = A.id
                    WHERE S.id = (%s)""", (screening,))
    screen_no = cur.fetchone()
    row = screen_no[0]
    column = screen_no[1]

   
    return render_template('booking/seatSelect.html', screeningId=screening,
                           title=title, time=time, rows=row, columns=column)


@bp_booking.route('/process-ticket', methods=['GET, POST'])
def process_ticket():
    ticket_value = request.form.get('hidden-ticket-value')
    ## insert into database here
    return 'Ticket inserted into database'

座位选择.html

<div id="container">
</div>

<div id = "right">
<p id= "quantity">
 Select your seats!
 </p>

    <form method="POST" action="{{ url_for('booking.process_ticket') }}">
    <input type="hidden" id="hidden" name="hidden-ticket-value">

    <input type="submit" value="Book" id="book-btn">
    </form>

</div>

</body>

seatSelect.html 有一些附加的 javascript 和 css 来制定座位计划,选定的座位存储在隐藏字段的值中。

单击提交时,我想路由到 process-ticket
<form method="POST" action="{{ url_for('booking.process_ticket') }}">
但取而代之的是seat_select(screening) function 再次调用参数screening=process-ticket这只是抛出和错误,因为我的function 需要一个数字。 知道为什么会这样吗?

我尝试对 HTML 进行硬编码以将 URL 用于process_ticket()并且发生了同样的事情。

编辑:我稍微改变了select_seat()的路线,现在process_ticket()似乎正在运行,但我得到了 405 method not allowed 错误。 如果 function 中存在methods=['GET, POST']是否会发生这种情况?

对我来说,问题可能是因为<screening>可以匹配任何字符串 - 甚至/process-ticket - 并且route("<screening>"...)首先检查 - 在route("/process-ticket")

Flask 首先将地址/process-ticketroute("<screening>"...)进行比较,并且匹配,因此它不与route("/process-ticket")进行检查,而是运行seat_select(screening="process-ticket") .

您必须将 function def process_ticket()放在def seat_select() ) 之前,然后 flask 将首先使用route("/process-ticket")检查地址/process-ticket

或者您应该使用<int:screening>仅匹配数字,然后地址/process-ticket将不匹配<int:screening>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM