我收到错误:TypeError: __init__() missing 1 required positional argument
整个错误是:
[2021-09-04 22:00:53,162] ERROR in app: Exception on /entry/title [GET]
Traceback (most recent call last):
File "/Users/shakur/PycharmProjects/flaskProject2/venv/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/shakur/PycharmProjects/flaskProject2/venv/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/Users/shakur/PycharmProjects/flaskProject2/venv/lib/python3.9/site-packages/flask_restful/__init__.py", line 467, in wrapper
resp = resource(*args, **kwargs)
File "/Users/shakur/PycharmProjects/flaskProject2/venv/lib/python3.9/site-packages/flask/views.py", line 82, in view
self = view.view_class(*class_args, **class_kwargs) # type: ignore
TypeError: __init__() missing 1 required positional argument: 'title'
127.0.0.1 - - [04/Sep/2021 22:00:53] "GET /entry/title HTTP/1.1" 500 -
Run Code Online (Sandbox Code Playgroud)
由于某种原因,获取请求抛出错误,我不知道为什么......不知道。任何建议,将不胜感激
from flask import Flask
from flask_restful import Resource, Api
import sqlite3
app = Flask(__name__)
app.secret_key = "xyz"
api = Api(app)
class Entry(Resource):
def __init__(self, title, language="Python", attempts=0,wins=0):
self.title = title
self.language = language
self.attempts = attempts
self.wins = wins
def __repr__(self):
#...
def record_attempts_and_wins(self, a, w=0):
#...
@classmethod
def find_entry_by_title(cls, title):
connection = sqlite3.connect("data.db")
cursor = connection.cursor()
query = "SELECT * FROM entries WHERE title=?"
result = cursor.execute(query, (title,))
column = result.fetchone()
if column:
entry = cls(*column)
else:
entry = None
connection.close()
return entry
def get(self, title):
entry = Entry.find_entry_by_title(self, title)
return entry
api.add_resource(Entry, "/entry/<string:title>")
Run Code Online (Sandbox Code Playgroud)
Flask 不知道您已向Resource子类添加了位置参数。你打电话时:
api.add_resource(Entry, "/entry/<string:title>")
Run Code Online (Sandbox Code Playgroud)
它只是认为Entrywill 是 a Resource,它的构造函数中没有参数title。title当它调用时,它怎么知道需要传递 aEntry()?
将构造函数参数传递到资源的文档中对此进行了解决。您需要告诉它什么作为标题传递:
api.add_resource(Entry, "/entry/<string:title>", resource_class_kwargs={ 'title': "some title" })
Run Code Online (Sandbox Code Playgroud)