Constrained multi-objective optimization problems exist widely in real-world applications, and they involve a simultaneous optimization of multiple and often conflicting objectives subject to several equality and/or inequality constraints. To deal with these problems, a crucial issue is how to handle constraints effectively. This paper proposes a simple yet effective constrained decomposition-based multi-objective evolutionary algorithm. In the proposal, the evolutionary process is divided into two stages in which constraints are handled differently. In the first stage, constraints are totally ignored and the population is pulled toward the unconstrained Pareto-optimal front (PF) by optimizing objectives only. This can help the proposed algorithm handle well problems with the following features, i.e., the constrained PF has an intersection with the unconstrained counterpart, and there are infeasible regions blocking the way of convergence. In the second stage, with the purpose of approximating the constrained PF well,constraint satisfaction is emphasized over objective minimization.Moreover, different evolutionary frameworks are adopted in the two stages to promote the performance of the algorithm as much as possible. The proposed algorithm is comprehensively compared with several state-of-the-art algorithms on 39 problems (with 266 test instances in total), including one real-world problem (with 36 instances) in search-based software engineering. As shown by the experimental results, the new algorithm performs best on the majority of these problems, particularly on those with the aforementioned features. In summary, the suggested algorithm provides an effective way of handling constrained multi-objective optimization problems.