Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

563
Views
TypeError: el objeto de la función de tipo no es JSON serializable cuando se usa la API RESTful de Flas_jwt_extended int

Estoy construyendo una API REST usando matraz. Estoy usando cartero para probar una ruta que crea un nuevo elemento en mi base de datos, pero solo si el usuario ha iniciado sesión. Las rutas para registrarse e iniciar sesión funcionan bien, la última devuelve el token usando el módulo Flash_jwt_extended. Cuando envío una solicitud de publicación a mi "/api/notas" (crea una nueva nota en la base de datos), aparece el siguiente error:

" (...) aumentar TypeError(f'Objeto de tipo {o. clase . nombre } '

TypeError: el objeto de la función de tipo no es JSON serializable"

para la solicitud estoy usando la pestaña de autorización de cartero. tipo: Bearer Token, y mi token en el campo (probado con y sin comillas)

Enfrenté este error esta mañana, antes de implementar mi relación uno-muchos, pero lo hice funcionar reemplazando mi VERY_LONG_TOKEN con "VERY_LONG_TOKEN" en el campo de token Barear. Pensé que debido a que el token incluye puntos, se estaba interpretando como una función. Pero después de implementar la relación, fui a probar y obtuve este error nuevamente.

mi archivo note.py:

 from flask import request, Response, jsonify from app.models import User, Note from flask_restful import Resource from flask_jwt_extended import jwt_required, get_jwt_identity class NotesApi(Resource): def get(self): notes = Note.objects().to_json() return Response(notes, mimetype="application/json", status=200) @jwt_required def post(self): # post method I'm making a request for print("fool") # this doesn't get printed -> not reaching user_id = get_jwt_identity() data = request.get_json(force=True) if data: user = User.objects(id=user_id) # logged in user note = Note(**data, user_author=user) # creates note with the author note.save() user.update(push__notes=note) # add this note to users notes user.save() id = str(note.id) return {'id': id}, 200 else: return {'error': 'missing data'}, 400

mis modelos.py:

 from app import db # using mongodb from datetime import datetime from flask_bcrypt import generate_password_hash, check_password_hash class Note(db.Document): title = db.StringField(max_length=120,required=True) content = db.StringField(required=True) status = db.BooleanField(required=True, default=False) date_modified = db.DateTimeField(default=datetime.utcnow) user_author = db.ReferenceField('User') class User(db.Document): username = db.StringField(max_length=100, required=True, unique=True) email = db.StringField(max_length=120, required=True, unique=True) password = db.StringField(required=True) remember_me = db.BooleanField(default=False) notes = db.ListField(db.ReferenceField('Note', reverse_delete_rule=db.PULL)) # one-many relationship def hash_password(self): self.password = generate_password_hash(self.password).decode('utf8') def check_password(self, password): return check_password_hash(self.password, password) User.register_delete_rule(Note, 'user_author', db.CASCADE)

iniciar .py:

 from flask import Flask from config import Config # my config class to set MONGOBD_HOST and SECRET_CLASS from flask_mongoengine import MongoEngine from flask_restful import Api from flask_bcrypt import Bcrypt from flask_jwt_extended import JWTManager app = Flask(__name__) app.config.from_object(Config) db = MongoEngine(app) api = Api(app) bcrypt = Bcrypt(app) jwt = JWTManager(app) from app.resources.routes import initialize_routes initialize_routes(api)

recursos/rutas.py:

 from .note import NotesApi, NoteApi from .auth import SignupApi, LoginApi def initialize_routes(api): api.add_resource(NotesApi, '/api/notes') api.add_resource(NoteApi, '/api/note/<id>') api.add_resource(SignupApi, '/api/auth/signup') api.add_resource(LoginApi, '/api/auth/login')

estructura de carpetas:

 app |_ resources |_ auth.py # signup working well, login also working, return a token (type = String) |_ note.py |_ routes.py |_ __init__.py |_ models.py config.py appname.py #just import app and do a app.run()

cuerpo de mi solicitud de publicación:

 { "title": "test0", "content": "test0" }

¿Alguien lo enfrentó antes o sabe cómo resolverlo?

Editar: agregó más información de código

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Solo deshazte de los códigos de estado HTTP, eso funcionó para mí. ejemplo

Reemplazar:

 return {'id': id}, 200

con:

 return {'id': id}

o:

 resp = jsonify({'id': id}) resp.status_code = 200 return resp
over 4 years ago · Santiago Trujillo Report

0

Parece que el frasco-jwt-extendido lanzó una nueva versión durante el fin de semana. Como parte de los cambios de API, el decorador @jwt_required ahora es @jwt_required()

https://flask-jwt-extended.readthedocs.io/en/stable/v4_upgrade_guide/#api-changes

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!