flask/docs/server.rst

168 lines
4.8 KiB
ReStructuredText
Raw Normal View History

2019-11-19 05:46:00 +08:00
.. currentmodule:: flask
2014-04-28 19:27:13 +08:00
Development Server
==================
2019-11-19 05:46:00 +08:00
Flask provides a ``run`` command to run the application with a
development server. In development mode, this server provides an
interactive debugger and will reload when code is changed.
.. warning::
Do not use the development server when deploying to production. It
is intended for use only during local development. It is not
designed to be particularly efficient, stable, or secure.
2014-04-28 19:27:13 +08:00
2019-11-19 05:46:00 +08:00
See :doc:`/deploying/index` for deployment options.
2014-04-28 19:27:13 +08:00
Command Line
------------
2019-11-19 05:46:00 +08:00
The ``flask run`` command line script is the recommended way to run the
2022-06-18 00:26:26 +08:00
development server. Use the ``--app`` option to point to your
application, and the ``--env development`` option to fully enable
development mode.
.. code-block:: text
$ flask --app hello --env development run
These options (and any others) can also be set using environment
variables.
2014-04-28 19:27:13 +08:00
.. tabs::
2019-11-19 05:46:00 +08:00
.. group-tab:: Bash
.. code-block:: text
$ export FLASK_APP=hello
$ export FLASK_ENV=development
$ flask run
2022-01-11 20:59:08 +08:00
.. group-tab:: Fish
.. code-block:: text
$ set -x FLASK_APP hello
$ export FLASK_ENV=development
$ flask run
.. group-tab:: CMD
.. code-block:: text
> set FLASK_APP=hello
> set FLASK_ENV=development
> flask run
.. group-tab:: Powershell
.. code-block:: text
> $env:FLASK_APP = "hello"
> $env:FLASK_ENV = "development"
> flask run
2014-04-28 19:27:13 +08:00
2018-01-11 07:38:52 +08:00
This enables the development environment, including the interactive
debugger and reloader, and then starts the server on
2019-11-19 05:46:00 +08:00
http://localhost:5000/. Use ``flask run --help`` to see the available
options, and :doc:`/cli` for detailed instructions about configuring
and using the CLI.
2014-04-28 19:27:13 +08:00
.. note::
2022-06-18 00:26:26 +08:00
Debug mode can be controlled separately from the development
environment with the ``--debug/--no-debug`` option or the
``FLASK_DEBUG`` environment variable. This is how older versions of
Flask worked. You should prefer setting the development environment
as shown above.
2019-11-19 05:46:00 +08:00
2021-11-17 00:38:20 +08:00
.. _address-already-in-use:
Address already in use
~~~~~~~~~~~~~~~~~~~~~~
If another program is already using port 5000, you'll see an ``OSError``
when the server tries to start. It may have one of the following
messages:
- ``OSError: [Errno 98] Address already in use``
- ``OSError: [WinError 10013] An attempt was made to access a socket
in a way forbidden by its access permissions``
Either identify and stop the other program, or use
``flask run --port 5001`` to pick a different port.
You can use ``netstat`` or ``lsof`` to identify what process id is using
a port, then use other operating system tools stop that process. The
following example shows that process id 6847 is using port 5000.
2021-11-17 00:38:20 +08:00
.. tabs::
.. tab:: ``netstat`` (Linux)
2021-11-17 00:38:20 +08:00
.. code-block:: text
$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python
.. tab:: ``lsof`` (macOS / Linux)
.. code-block:: text
$ lsof -P -i :5000
Python 6847 IPv4 TCP localhost:5000 (LISTEN)
.. tab:: ``netstat`` (Windows)
2021-11-17 00:38:20 +08:00
.. code-block:: text
> netstat -ano | findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 6847
macOS Monterey and later automatically starts a service that uses port
2021-12-16 11:28:09 +08:00
5000. To disable the service, go to System Preferences, Sharing, and
2021-11-17 00:38:20 +08:00
disable "AirPlay Receiver".
Deferred Errors on Reload
~~~~~~~~~~~~~~~~~~~~~~~~~
2019-11-19 05:46:00 +08:00
When using the ``flask run`` command with the reloader, the server will
continue to run even if you introduce syntax errors or other
initialization errors into the code. Accessing the site will show the
interactive debugger for the error, rather than crashing the server.
If a syntax error is already present when calling ``flask run``, it will
fail immediately and show the traceback rather than waiting until the
site is accessed. This is intended to make errors more visible initially
while still allowing the server to handle errors on reload.
2014-04-28 19:27:13 +08:00
In Code
-------
2019-11-19 05:46:00 +08:00
As an alternative to the ``flask run`` command, the development server
can also be started from Python with the :meth:`Flask.run` method. This
method takes arguments similar to the CLI options to control the server.
The main difference from the CLI command is that the server will crash
if there are errors when reloading.
``debug=True`` can be passed to enable the debugger and reloader, but
the ``FLASK_ENV=development`` environment variable is still required to
fully enable development mode.
Place the call in a main block, otherwise it will interfere when trying
to import and run the application with a production server later.
2014-04-28 19:27:13 +08:00
2019-11-19 05:46:00 +08:00
.. code-block:: python
2014-04-28 19:27:13 +08:00
2019-11-19 05:46:00 +08:00
if __name__ == "__main__":
app.run(debug=True)
2014-04-28 19:27:13 +08:00
2019-11-19 05:46:00 +08:00
.. code-block:: text
2014-04-28 19:27:13 +08:00
2019-11-19 05:46:00 +08:00
$ python hello.py