# documentação Django 3.1.9.dev

# Como fazer o deploy com ASGI

As well as WSGI, Django also supports deploying on ASGI, the emerging Python standard for asynchronous web servers and applications.

Django’s `startproject` management command sets up a default ASGI configuration for you, which you can tweak as needed for your project, and direct any ASGI-compliant application server to use.

Django includes getting-started documentation for the following ASGI servers:

- How to use Django with Daphne
- How to use Django with Hypercorn
- How to use Django with Uvicorn

## O objeto `Application`

Like WSGI, ASGI has you supply an `application` callable which the application server uses to communicate with your code. It’s commonly provided as an object named `application` in a Python module accessible to the server.

The `startproject` command creates a file `<project_name>/asgi.py` that contains such an `application` callable.

It’s not used by the development server (`runserver`), but can be used by any ASGI server either in development or in production.

ASGI servers usually take the path to the application callable as a string; for most Django projects, this will look like `myproject.asgi:application`.

Aviso

While Django’s default ASGI handler will run all your code in a synchronous thread, if you choose to run your own async handler you must be aware of async-safety.

Do not call blocking synchronous functions or libraries in any async code. Django prevents you from doing this with the parts of Django that are not async-safe, but the same may not be true of third-party apps or Python libraries.

## Configurando o módulo de definições.

When the ASGI server loads your application, Django needs to import the settings module — that’s where your entire application is defined.

O Django usa a variável de ambiente `DJANGO_SETTINGS_MODULE` para localizar o módulo de definições apropriado. Este deve conter um caminho pontuado para o módulo de definições. Você pode usar um valor diferente para desenvolvimento e produção; Tudo depende de como você organiza suas definições.

If this variable isn’t set, the default `asgi.py` sets it to `mysite.settings`, where `mysite` is the name of your project.

## Applying ASGI middleware

To apply ASGI middleware, or to embed Django in another ASGI application, you can wrap Django’s `application` object in the `asgi.py` file. For example:

    from some_asgi_library import AmazingMiddleware
    application = AmazingMiddleware(application)