不允许使用Flask 405方法 [英] Flask 405 Method Not Allowed
问题描述
单击"subimit"按钮后,我遇到了标题中的问题,当我将路由从应用程序分离到视图时,当我进入localhost:5000/register/时,问题开始显示,但是当我填写表格并单击提交"时我有问题405
after click subimit button I have problem like in title, the problem start showing when I separated routes from app to views, when I go to localhost:5000/register/ all is good but when I fill the form and click submit then I have problem 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>
推荐答案
Flask找不到/register/
端点的POST方法处理程序.您正在混合 add_url_rule
和 @route
.如果您想要可插入的视图,则只需要前者即可.
Flask is not finding the POST method handler for the /register/
endpoint. You're mixing add_url_rule
and @route
. You just need the former if you want pluggable views.
我建议在这里使用MethodView方法.每个模板都有一个单独的类,并在其中定义 get()
和 post()
方法.
I would recommend using the MethodView approach here. Have a separate class for each template and define the get()
and post()
methods within that.
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')
这篇关于不允许使用Flask 405方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!