gpt4 book ai didi

python - Rest Api 后定义失败 | python | flask

转载 作者:行者123 更新时间:2023-12-01 06:38:02 25 4
gpt4 key购买 nike

我对Python很陌生。我对 python 有基本的想法,而 Flask 对我来说是全新的。尝试使用flask通过python学习rest api。但是,我在发布数据时遇到了这个问题。以下是示例代码和错误。请帮我解决这个问题。提前致谢。我尝试谷歌搜索但没有得到任何解决方案。

运行时出错

127.0.0.1 - - [03/Jan/2020 15:58:54] "POST /api/User HTTP/1.1" 500 -
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 273, in error_router
return original_handler(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 32, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 273, in error_router
return original_handler(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 32, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 480, in wrapper
resp = resource(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask/views.py", line 84, in view
return self.dispatch_request(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "/Users/z0034ff/Documents/music/resources/Users.py", line 32, in post
typeid=json_data['typeid'],
TypeError: __init__() got an unexpected keyword argument 'fname'

文件名:Model.py

from flask import Flask
from marshmallow import Schema, fields, pre_load, validate
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy


ma = Marshmallow()
db = SQLAlchemy()


class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
fname = db.Column(db.String(50), nullable=False)
lname = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(100), nullable=False)
phone = db.Column(db.String(50), nullable=False)
typeid = db.Column(db.Integer, db.ForeignKey(
'user_type.id', ondelete='CASCADE'), nullable=False)
creation_date = db.Column(
db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False)

def __init__(self, users, typeid):
self.users = users
self.typeid = typeid

class UsersSchema(ma.Schema):
id = fields.Integer(dump_only=True)
fname = fields.String(required=True, validate=validate.Length(1))
lname = fields.String(required=True, validate=validate.Length(1))
email = fields.String(required=True, validate=validate.Length(1))
phone = fields.String(required=True, validate=validate.Length(10))
typeid = fields.Integer(required=True)
creation_date = fields.DateTime()

文件名:Users.py

from flask import jsonify, request
from flask_restful import Resource
from Model import db, Users, UsersSchema

users_schema = UsersSchema(many=True)
user_schema = UsersSchema()


class UsersResource(Resource):
def get(self):
users = Users.query.all()
users = users_schema.dump(users).data
return {"status": "success", "data": users}, 200

def post(self):
json_data = request.get_json(force=True)
if not json_data:
return {'message': 'No input data provided'}, 400
# Validate and deserialize input
data, errors = user_schema.load(json_data)
if errors:
return errors, 422
user = Users.query.filter_by(email=data['email']).first()
if user:
return {'message': 'User already exists'}, 400
print(json_data['fname'])
user = Users(
fname=json_data['fname'],
lname=json_data['lname'],
email=json_data['email'],
phone=json_data['phone'],
typeid=json_data['typeid'],
)

db.session.add(user)
db.session.commit()

result = user_schema.dump(user).data

return {"status": 'success', 'data': result}, 201

最佳答案

没有必要定义SQLAlchemy模型构造函数。 SQLAlchemy docs解释:

Our User class, as defined using the Declarative system, has been provided with a constructor (e.g. init() method) which automatically accepts keyword names that match the columns we’ve mapped. We are free to define any explicit init() method we prefer on our class, which will override the default method provided by Declarative.

Users.py第27行中,您尝试创建Users对象

          Users(
fname=json_data['fname'],
lname=json_data['lname'],
email=json_data['email'],
phone=json_data['phone'],
typeid=json_data['typeid'],
)

Model.py 中,Users 类的构造函数仅需要 2 个参数。

  class Users(db.Model):
....

def __init__(self, users, typeid):
...

这就是错误的来源:类型错误:__init__() 获得意外的关键字参数“fname”

删除__init__后它应该可以正常工作。

关于python - Rest Api 后定义失败 | python | flask ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com