首页 > 解决方案 > POST 方法不允许用于简单的查找网页

问题描述

我有一个带有数据输入字段和单击按钮的简单页面,这将运行 API 来检索硬币数据

在 python 终端中运行代码返回成功,但是当我尝试将其添加到烧瓶并使用网页时,我收到错误 405 方法不允许用于 POST。

这是主要的 python/flask 文件: crypto.py

# template libraries
from flask import render_template,url_for,flash,request,redirect,Blueprint

# Coingecko API library
from pycoingecko import CoinGeckoAPI

crypto_simulator = Blueprint('crypto_simulator',__name__)

@crypto_simulator.route('/crypto_simulator', methods=['GET','POST'])
@login_required
def crypto_insert():
    if request.form.get("ident") == "formCrypto":
        print('Hello')

        cg = CoinGeckoAPI()

        #crypto_token = request.form.get('crypto_name_html', '')
        crypto_token = 'bitcoin'
        crypto_currency = 'usd'

        response = cg.get_price(ids=crypto_token,
                                vs_currencies='usd', 
                                include_market_cap='true', 
                                include_24hr_vol='true',
                                include_24hr_change='true',
                                include_last_updated_at='true')

        crypto_result = response.get(crypto_token,'')
        print(crypto_result[crypto_currency])

        return render_template('crypto_simulator.html',
                                formCryptoSimulation=form,
                                crypto_token=crypto_token,
                                crypto_currency=crypto_currency,
                                crypto_result=crypto_result
                                )

这是蓝图路由文件: core.py

# crypto section
@core.route('/crypto_simulator')
def crypto_simulator():
    return render_template('crypto_simulator.html')

这是 Flask/Bootstrap 前端: crypto_simulator.html

{% extends "base.html" %}
{% block content %}

<!-- Simulation Code Start -->
<div class="forms">
    <div class="formCrypto">
        <form method="post" action="{{ url_for('core.crypto_simulator') }}">
          <div class="container">
            <div class="row g-3">
            <div class="col-sm-3">
                <label class="form-label"><b>Crypto Name:</b></label>
                <input type="text" class="form-control" name="crypto_name_html" placeholder="Enter Crypto Name" required>
            </div>
          </div>
        </div>
            <br>
            <div class="d-grid gap-2 d-md-flex justify-content-md-start">
              <button id="btn" type="submit" class="btn btn-info">Check Token!</button>
            </div>
            <input type=hidden name="ident" value="formCrypto">
        </form>
        <br>
            <p>Token: <b>{{crypto_token}}</b>
            <p>Price: <b>{{crypto_result}}</b>
    </div>
</div>

{% endblock %}

我检查了拼写错误的行和任何相关内容,但仍然坚持如何修复它......

标签: pythonflask

解决方案


你的表格有这个:

<form method="post" action="{{ url_for('core.crypto_simulator') }}">

crypto_simulator所以你在 blueprint中调用函数core

@core.route('/crypto_simulator')
def crypto_simulator():
    return render_template('crypto_simulator.html')

请注意,您的表单执行 POST 请求,因此您必须在被调用的函数上启用 POST 方法,如下所示:

@core.route('/crypto_simulator', methods=['GET','POST'])

推荐阅读