How do we define quasi-coherent sheaves on schemes?

Say we start by defining the category of affine schemes Aff as CRing$^{op}$ (the opposite category of unitary commutative rings). In this context we have an obvious way to define quasi-coherent sheaves:

A quasi-coherent sheaf on an affine scheme X=Spec A is just an A-module.

If we now define schemes as presheaves on Aff (satisfying some condition), how do we define what a quasi-coherent sheaf is? The same question applies also to the operations of pushforward and pullback, which in Aff have obvious definitions.