Flaskを使ったルーティングがうまくいかずエラーが出る
実現したいこと
フォームに入力した文字列がデータベースに格納され、HTMLのページに反映されるプログラムをPython・FlaskとSQLAlchemyを使って書いています。
困っていること
$ FLASK_APP=app.py FLASK_DEBUG=true flask run
として実行すると以下のエラーが表示され、画面が読み込まれません。
解決方法が分からず困っています。
エラー文(書いたプログラム以外のファイルに関する、実行後レスポンスの記述は省略しています)
File "/Users/username/Desktop/app.py", line 18, in <module>
TypeError: __init__() got an unexpected keyword argument 'method'
line18というと以下に当たるのですが、どのように修正すれば良いのでしょうか。
@app.route('/todos/create', method=['POST'])
実行しているコード
index.html
<html>
<head>
<title>Todo App</title>
</head>
<body>
<form method="post" action="/todos/create">
<input type= "text" name="description" />
<input type= "submit" value="Create" />
</form>
<ul>
{% for d in data %}
<li>{{d.description}}</li>
{% endfor %}
</ul>
</body>
</html>
app.py
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://username@localhost:5432/todoapp'
db = SQLAlchemy(app)
class Todo(db.Model):
__tablename__ = 'todos'
id = db.Column(db.Integer, primary_key=True)
description = db.Column(db.String(), nullable=False)
def __repr__(self):
return f'<Todo {self.id}{self.description}>'
db.create_all()
@app.route('/todos/create', method=['POST'])
def create_todo():
description = request.form.get('description', '')
todo = Todo(description=description)
db.session.add(todo)
db.session.commit()
return redirect(url_for('index'))
@app.route('/')
def index():
return render_template('index.html', data=Todo.query.all())
実行環境
Flask 1.1.1
sqlalchemy 1.3.10