One use case. Suppose you feed an image through several conv layers, and then you want to run the extracted features through a linear layer. The conv output is of shape (batch_size, channels_out, height_out, width_out), now we want the linear layer to take all features from all channels and from every position in the image, but nn.Linear only acts on the last dimension of its input. That is where view comes in handy.
linear_input = conv_output.view(batch_size, channels_out*height_out*width_out)

linear_input is now of shape (batch_size, all_features_of_all_channels_at_all_positions)