【问题标题】:missing 2 required positional arguments but I don't want them to be arguments to begin with?缺少 2 个必需的位置参数,但我不希望它们成为开始的参数?
【发布时间】:2021-11-02 23:38:10
【问题描述】:

这是我使用 Flask 的 Python 代码的一部分:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    base_city = db.Column(db.String(120), nullable=False)
    about_me = db.Column(db.String(1000), nullable=False, default='comedy!')
    mic_submit = db.relationship('Mic', backref='initiator', lazy=True)
    mic_checkin = db.relationship('Checkins', backref='signee', lazy=True)

    def __init__(self, username, email, password, base_city, about_me, mic_submit, mic_checkin):
        self.username = username
        self.email = email
        self.password = password
        self.base_city = base_city
        self.about_me = about_me
        self.mic_submit = mic_submit
        self.mic_checkin=mic_checkin

    def __repr__(self):
        return f"User('{self.username}','{self.email}', '{self.password}', '{self.base_city}', '{self.about_me}', '{self.mic_submit}','{self.mic_checkin}')"


class RegisterSchema(ma.Schema):
    class Meta:
        fields = ('id', 'username', 'email', 'password', 'base_city', 'about_me')

register_schema = RegisterSchema()
registers_schema = RegisterSchema(many=True)

mic_submitmic_checkin 存在是因为我希望 id 成为其他几个表中的外键

这里是有问题的路线:

@app.route("/register", methods=['POST'])
def register():
    username = request.json['username']
    email = request.json['email']
    password = request.json['password']
    base_city = request.json['base_city']
    about_me = request.json['about_me']
    hashed_password = bcrypt.generate_password_hash(password)
    user = User(username=username, email=email, password=hashed_password, base_city=base_city, about_me=about_me)
    db.session.add(user)
    db.session.commit()

我的问题是,当有人在网站上注册时,我希望他们只提交 username emailpasswordbase cityabout_me,但后端的错误是:

Traceback (most recent call last):
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/pm/ionic_apps/pobblebonk/venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/pm/ionic_apps/pobblebonk/backend/app.py", line 138, in register
    user = User(username=username, email=email, password=hashed_password, base_city=base_city, about_me=about_me)
TypeError: __init__() missing 2 required positional arguments: 'mic_submit' and 'mic_checkin'

但我不会要求他们提交mic_submitmic_checkin,因为这些列只是为了让我确保该表与其他两个表有关系。我该怎么办?

这是前端的 javascript APIService 文件:

export default class APIService {

  static RegisterUser(username, email, password, base_city, about_me) {
    
    console.log('i am here')
      
    return fetch(`http://localhost:5000/register`, {
      'method':'POST',
      mode: 'cors',
      headers: {
    'Content-Type':'application/json'
      },
      body: JSON.stringify(username, email, password)
    })
    .then(resp => window.location.href = "login")
    .catch(error => console.log(error, "Not In the APIService"))
  }

【问题讨论】:

    标签: javascript python flask backend web-development-server


    【解决方案1】:

    您不必定义 init 方法。 Flask-SQLAlchemy 为您生成它。这是满足您需求的 User 类:

    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(20), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
        password = db.Column(db.String(60), nullable=False)
        base_city = db.Column(db.String(120), nullable=False)
        about_me = db.Column(db.String(1000), nullable=False, default='comedy!')
        mic_submit = db.relationship('Mic', backref='initiator', lazy=True)
        mic_checkin = db.relationship('Checkins', backref='signee', lazy=True)
    
        def __repr__(self):
            return f"User('{self.username}','{self.email}', '{self.password}', '{self.base_city}', '{self.about_me}', '{self.mic_submit}','{self.mic_checkin}')"
    

    【讨论】:

    • 成功了,谢谢!我想知道为什么在我看的教程中他把它放在那里:youtu.be/msEmUtYqVV0?t=854
    • 视频中的主要区别在于他只有列,而不是关系,作为 init 方法的参数。如果你这样做,我建议你在函数体的末尾做类似super().__init__(username=username, email=email, ...) 的事情。
    猜你喜欢
    • 2019-02-08
    • 2021-07-22
    • 2020-06-13
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多