Tengo un sitio next.js implementado en Vercel, que obtiene datos de una API proporcionada por Django. Next.js tiene esta nueva función (regeneración estática incremental bajo demanda) en la que puede reconstruir una página específica sin necesidad de reconstruir todo el sitio con una URL como esta:
https://<mi-sitio.com>/api/revalidate?secret=my-token
Necesito que el sitio next.js reconstruya algunas páginas cuando cambie la base de datos, para que muestre los nuevos datos, y traté de hacer una solicitud (con el paquete de solicitudes) en el método de guardado como este:
def save(self, *args, **kwargs): super(MyModel, self).save(*args, **kwargs) r = requests.get("https://<my-site.com>/api/revalidate?secret=<my-token>")Parece funcionar cuando activo esa URL desde mi navegador, pero no funciona cuando lo activo desde Django. La respuesta de este objeto de respuesta (r) es un código de estado 200, como se esperaba, con {"revalidado": verdadero} (r.text), pero de todos modos no actualiza el sitio.
¿Cómo puedo implementar esto?
EDITAR: aquí está el código de pages/api/revalidate.js:
export default async function handler(req, res) { if (req.query.secret !== process.env.MY_SECRET_TOKEN) { return res.status(401).json({ message: 'Invalid token' }) } try { await res.unstable_revalidate('/') await res.unstable_revalidate('/url') return res.json({ revalidated: true }) } catch (err) { return res.status(500).send('Error revalidating') } }Tenía un problema similar. Creo que no estaba funcionando porque en realidad necesitas guardar antes de la revalidación.
Esto funcionó para mí:
def save(self, *args, **kwargs): try: return super().save(*args, **kwargs) finally: r = requests.get("https://<my-site.com>/api/revalidate?secret=<my-token>")