This answer applies to both Django and Flask (and all other Python wsgi frameworks, AFAIK):
Applications like Flask and Django come with a lightweight webserver builtin that will help you out when you're developing. They're fully functional HTTP servers, that in theory you could use in production. But you shouldn't.
The reason you shouldn't is that these servers tend to be very basic, single-threaded, and very uncomplicated. This is a good thing from the perspective of development, because you don't have to worry about installing this, that, and the other. Plus they might do nifty things like reload your application for you when you make a change.
But they only expect one user to be touching the page at a time. You, the developer.
This is not what you want in production.
In production you want a web server that is capable of handling thousands of requests per second, either via threading (but probably not) or the reactor pattern. You don't want your web server to stop responding to other requests when you handle a long-running query or file upload. This is where servers like Gunicorn or Tornado come in - they allow a ton of connections to happen at once, and they're able to handle communication between your Django/Flask/Bottle/CherryPy/etc. application and the Internet at large. That's a good thing.
The process should not be a complicated one to swap from the built-in wsgi server and gunicorn/tornado or anything else that can run a wsgi application. That's the whole point of the wsgi layer.
If there is some problem converting either you have some problems with your understanding, or your application is misconfigured. Both of those are problems that the SO community can help, and there are probably a few questions that already address most of the more common scenarios.