# Getting Started
Before we begin, make sure you are running Python 3.6 or higher. Currently, is known to work with Python versions 3.6, 3.7 and 3.8.
# Install
pip install sanic
# Hello, world application
If you have ever used one of the many decorator based frameworks, this probably looks somewhat familiar to you.
TIP
If you are coming from Flask or another framework, there are a few important things to point out. Remember, Sanic aims for performance, flexibility, and ease of use. These guiding principles have tangible impact on the API and how it works.
from sanic import Sanic
from sanic.response import text
app = Sanic("My Hello, world app")
@app.get("/")
async def hello_world(request):
return text("Hello, world.")
# Important to note
- Every request handler can either be sync (
def hello_world
) or async (async def hello_world
). Unless you have a clear reason for it, always go withasync
. - The
request
object is always the first argument of your handler. Other frameworks pass this around in a context variable to be imported. In theasync
world, this would not work so well and it is far easier (not to mention cleaner and more performant) to be explicit about it. - You must use a response type. MANY other frameworks allow you to have a return value like this:
return "Hello, world."
or this:return {"foo": "bar"}
. But, in order to do this implicit calling, somewhere in the chain needs to spend valuable time trying to determine what you meant. So, at the expense of this ease, Sanic has decided to require an explicit call.
# Running
Let's save the above file as server.py
. And launch it.
sanic server.app
TIP
This another important distinction. Other frameworks come with a built in development server and explicitly say that it is only intended for development use. The opposite is true with Sanic.
The packaged server is production ready.