我有一个本地 SQLlite 数据库,我通过下面的代码连接了它:'''
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, Integer, String, Float
import os
from flask_marshmallow import Marshmallow, Schema
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'planets.db')
db = SQLAlchemy(app)
ma = Marshmallow(app)
@app.cli.command('db_create')
def db_create():
db.create_all()
print('Database created!')
@app.cli.command('db_drop')
def db_drop():
db.drop_all()
print('Database dropped!')
@app.cli.command('db_seed')
def db_seed():
mercury = Planet(planet_name='Mercury',
planet_type='Class D',
home_star='Sol',
mass=2.258e23,
radius=1516,
distance=35.98e6)
venus = Planet(planet_name='Venus',
planet_type='Class K',
home_star='Sol',
mass=4.867e24,
radius=3760,
distance=67.24e6)
earth = …Run Code Online (Sandbox Code Playgroud) 我工作Flask-Marshmallow了验证request,并response在架构Flask app。我能为做简单的验证request.form和request.args当有简单的领域,如Int,Str,Float等。
我有一个案例,我需要使用表单字段上传文件 - file_field。它应该包含文件内容。
如何验证此字段是否存在以及文件格式是什么等。
是否有任何这样的领域Marshmallow,我可以使用喜欢fields.Int()或fields.Str()
我的数据库中有以下示例表,我通过 Flask_SQLAlchemy 管理该表。
class Employee(db.Model):
__tablename__ = 'employee'
id = db.Column(db.Integer, primary_key=True)
salutation = db.Column(db.String(250), nullable=False)
first_name = db.Column(db.String(250), nullable=False)
last_name = db.Column(db.String(250), nullable=False)
employments = db.relationship('Employment', foreign_keys='Employment.employee_id', backref="employee", lazy=True)
Run Code Online (Sandbox Code Playgroud)
我的 Flask 架构如下所示:
class EmployeeSchema(mm.SQLAlchemyAutoSchema):
class Meta:
model = DB_employee.Employee
include_fk = True
include_relationships = True
Run Code Online (Sandbox Code Playgroud)
以下是我的员工 GET 路由:
class EmployeesListAPI(Resource):
def __init__(self):
self.reqparse_get = reqparse.RequestParser()
self.reqparse_get.add_argument('employee_id', type=int, action='append', required=False, location='args')
self.reqparse_get.add_argument('salutation', type=str, action='append', required=False, location='args')
self.reqparse_get.add_argument('first_name', type=str, required=False, location='args')
self.reqparse_get.add_argument('last_name', type=str, required=False, location='args')
super(EmployeesListAPI, self).__init__()
def get(self):
get_args = …Run Code Online (Sandbox Code Playgroud) sqlalchemy flask-sqlalchemy flask-restful marshmallow flask-marshmallow
我在 Flask 中有一个 POST 端点,它接受一个 json 数据,其中包含一个键 -collections它有一个列表作为值,而该值又包含包含特定键的字典列表。
我正在尝试验证,request.json但找不到合适的方法。
这是棉花糖模式的代码:
class RowSchema(Schema):
nationalCustomerId = fields.Int(required=True)
storeId = fields.Int(required=True)
categoryId = fields.Int(required=True)
deliveryDate = fields.Date(required=True, format="%Y-%m-%d")
class RequestSchema(Schema):
combinations = fields.List(RowSchema)
Run Code Online (Sandbox Code Playgroud)
我试图用request.json来验证RequestSchema。
我发送的内容request.json如下:
{
"combinations": [
{
"nationalCustomerId": 1,
"storeId": 1,
"categoryId": 1,
"deliveryDate": "2020-01-20"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我哪里出错了?
这是我收到的错误:
ValueError:列表元素必须是 marshmallow.base.FieldABC 的子类或实例。
我正在尝试使用 SQLAlchemy 和 Marshmallow 将新用户插入到数据库中。该user参数是从 API 端点接收的。一切正常,直到我到达create函数中的这一行:
db.session.add(new_user)
Run Code Online (Sandbox Code Playgroud)
此时new_user变量的值是:
{'password': 'string', 'email': 'fave@string', 'username': 'string'}
Run Code Online (Sandbox Code Playgroud)
功能:
def create(user):
uname = user.get('username')
email = user.get('email')
password = user.get ('password')
existing_username = User.query.filter(User.username == uname).one_or_none()
if existing_username is None:
schema = UserSchema()
new_user = schema.load(user, session=db.session)
db.session.add(new_user) <- It fails here
db.session.commit()
return schema.dump(new_user), 201
Run Code Online (Sandbox Code Playgroud)
楷模:
class User (db.Model):
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)
profile_picture = db.Column(db.String(20), …Run Code Online (Sandbox Code Playgroud) python sqlalchemy flask-sqlalchemy flask-marshmallow marshmallow-sqlalchemy
我正在尝试图像上传 API,但收到以下错误
127.0.0.1 "POST //upload/image HTTP/1.1" 500 -
Traceback (most recent call last):
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask_restful\__init__.py", line 272, in error_router
return original_handler(e)
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\_compat.py", line 38, in reraise
raise value.with_traceback(tb)
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "D:\c_code\projects\python_api\.venv\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request …Run Code Online (Sandbox Code Playgroud)