我仍然坚持使用 Flask 中的注册表单。 我不断收到以下错误消息:
TypeError: regUser() missing 1 required positional argument: 'rank'
a@a.com $2a$12$7DG.DR3v3KC6QR6JCa4c4uwH.aONn1yR8vhLEfaGZ6iIihILbvKFW 000000
127.0.0.1 - - [22/Sep/2015 18:49:30] "POST /register HTTP/1.1" 500 -
Traceback (most recent call last):
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/alex/Python/pjctbluebook/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/alex/Python/pjctbluebook/pjctBB/views.py", line 52, in register
User.regUser("aaaa", "aaaa", "aaaaa", "000000")
TypeError: regUser() missing 1 required positional argument: 'rank'
在我看来,我有以下内容(在本例中为硬编码“等级”)
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
return render_template('index.html')
elif request.method == 'POST':
email = request.form['email']
username = request.form['username']
password = generate_password_hash(request.form['pass1'])
rank = 50
print(email, password, username)
User.regUser(email, password, username, rank)
# db.session.add(User(email, username, password, "50"))
# db.session.commit()
return render_template('index.html')
User 类被导入到 Views 中,但仅在 Views 的末尾导入(因为它创建了一个循环引用并与我的“from pjctBB import app”发生冲突)
from pjctBB.models import User
在我的模型中我有:
from pjctBB.views import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String, nullable=False)
username = db.Column(db.String, nullable=False)
password = db.Column(db.String, nullable=False)
rank = db.Column(db.Integer, nullable=False)
def __init__(self, email, username, password, rank):
self.email = email
self.username = username
self.password = password
self.rank = rank
def regUser(self, email, username, password, rank):
db.session.add(User(email, username, password, rank))
db.session.commit()
我尝试对“排名”进行硬编码,通过表单本身等中的隐藏字段传递值,但它不起作用。 当我在 View 和模型中删除任何关于排名的引用时,我仍然得到相同的错误,但现在对于变量“密码”...
请注意,当我打印电子邮件/用户名/密码的值并在控制台中排名之前尝试将它们传递给函数时:它们在控制台中准确显示。
我在这里不知所措。 我希望有人能看穿这个问题并给我一些指导。
感谢您阅读我的文章,我希望能收到您的来信!
最佳答案
请尝试按如下方式更新您的模型:
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String, nullable=False)
username = db.Column(db.String, nullable=False)
password = db.Column(db.String, nullable=False)
rank = db.Column(db.Integer, nullable=False)
def __init__(self, email, username, password, rank):
self.email = email
self.username = username
self.password = password
self.rank = rank
@classmethod
def regUser(cls, email, username, password, rank):
db.session.add(cls(email, username, password, rank))
db.session.commit()
因为你正在调用 User.regUser
方法,所以不需要 self
参数,但是需要 @staticmethod
装饰器。
关于python - Flask 注册错误 : missing 1 positional argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32715142/