python - Flask 注册错误 : missing 1 positional argument

标签 python database forms flask

我仍然坚持使用 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/

相关文章:

python - 仅当列中的特定值是唯一的时,如何替换它?

python - 在 rclpy ROS2 中设置 pub&sub 中的端点

mysql - 删除加入中不存在的记录

Laravel 中正确字符和排序规则的 MySQL 设置

forms - 提交表格(发送带有数据的电子邮件)并重定向到 Paypal 页面

python - 如何用python中的json替换变量的值?

Python ndimage : Converting an existing ndarray into greyscale

java - 如何在现有 Realm 数据库中添加新表?

asp.net - ASP.net 中的提交按钮

html - 如何在网站上的多个登录字段上使用自动填充