【问题标题】:Flask 405 Method Not AllowedFlask 405 方法不允许
【发布时间】:2020-06-19 05:13:58
【问题描述】:

单击提交按钮后,我遇到了标题中的问题,当我将路由从应用程序分隔到视图时,问题开始显示,当我转到 localhost:5000/register/ 时,一切都很好,但是当我填写表格并单击提交时我有问题 405

app.py

from flask import Flask,render_template,request,redirect,abort
app = Flask(__name__)
import views

app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/login/', view_func=views.login)
app.add_url_rule('/register/', view_func=views.register)

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

views.py

from flask import Flask,render_template,request,redirect,abort
app = Flask(__name__)

@app.route('/register/', methods=["GET","POST"])
def register():
    if request.method == "POST":
        req = request.form
        email = req.get("email")
        password = req["password"]
        phonenumber = request.form["phonenumber"]
        if email == "" or password == "" or phonenumber=="":
            feedback="Please fill the form"
            alert = "fail"
        else:
            feedback="Account created!"
            alert = "good"
        return render_template('register.html',feedback=feedback,alert=alert)
    return render_template('register.html')

@app.route('/')
def index():
    print("CIAO")
    return render_template('base.html')

和形式

<form class="" method="POST" action="{{ url_for('register') }}">
    <input type="email" name="email" placeholder="Email">
    <input type="password" name="password" placeholder="password" minlength="8">
    <input type="tel" name="phonenumber" placeholder="Numer Telefonu" minlength="8" maxlength="9">
    <input type="submit" name="submit">
</form>

【问题讨论】:

    标签: python forms flask post get


    【解决方案1】:

    Flask 没有找到 /register/ 端点的 POST 方法处理程序。你正在混合add_url_rule@route。如果你想要可插入的视图,你只需要前者。

    我建议在这里使用 MethodView 方法。每个模板都有一个单独的类,并在其中定义get()post() 方法。

    app.py:

    from flask import Flask
    from views import Register, Login, Index
    
    app = Flask(__name__)
    
    app.add_url_rule('/', view_func=Index.as_view("index"))
    app.add_url_rule('/login/', view_func=Login.as_view("login"))
    app.add_url_rule('/register/', view_func=Register.as_view("register"))
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    views.py:

    from flask import Flask,render_template,request,redirect,abort
    from flask.views import MethodView
    
    
    class Register(MethodView):
        def get(self):
            return render_template('register.html')
    
        def post(self):
            req = request.form
            email = req.get("email")
            password = req["password"]
            phonenumber = request.form["phonenumber"]
            if email == "" or password == "" or phonenumber == "":
                feedback = "Please fill the form"
                alert = "fail"
            else:
                feedback = "Account created!"
                alert = "good"
            return render_template('register.html', feedback=feedback, alert=alert)
    
    
    class Index(MethodView):
        def get(self):
            print("CIAO")
            return render_template('index.html')
    
    
    class Login(MethodView):
        def get(self):
            return render_template('login.html')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2023-03-23
      • 2011-06-21
      相关资源
      最近更新 更多