You can initialize a project from this azd template in one of these ways:
-
Use this
azd initcommand from an empty local (root) folder:azd init
Supply an environment name, such as
flexquickstartwhen prompted. Inazd, the environment is used to maintain a unique deployment context for your app.
Add a file named local.settings.json in the root of your project with the following contents:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
}
}The way that you create your virtual environment depends on your operating system. Open the terminal, navigate to the project folder, and run these commands:
python -m venv .venv
source .venv/bin/activatepy -m venv .venv
.venv\scripts\activate-
To start the Functions host locally, run these commands in the virtual environment:
pip3 install -r requirements.txt func start
-
From your HTTP test tool in a new terminal (or from your browser), call the HTTP GET endpoint: http://localhost:7071/api/httpget
-
Test the HTTP POST trigger with a payload using your favorite secure HTTP test tool. This example uses the
curltool with payload data from thetestdata.jsonproject file:
curl -X POST http://localhost:7071/api/httppost \
-H "Content-Type: application/json" \
-d '{"name":"Developer","age":25}'-
When you're done, press Ctrl+C in the terminal window to stop the
func.exehost process. -
Run
deactivateto shut down the virtual environment.
The source code for both functions is in the function_app.py code file. Azure Functions requires the use of the @azure/functions library.
This code shows an HTTP GET triggered function:
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")This code shows an HTTP POST triggered function:
@app.route(route="httppost", methods=["POST"])
def http_post(req: func.HttpRequest) -> func.HttpResponse:
try:
req_body = req.get_json()
name = req_body.get('name')
age = req_body.get('age')
logging.info(f"Processing POST request. Name: {name}")
if name and isinstance(name, str) and age and isinstance(age, int):
return func.HttpResponse(f"Hello, {name}! You are {age} years old!")
else:
return func.HttpResponse(
"Please provide both 'name' and 'age' in the request body.",
status_code=400
)
except ValueError:
return func.HttpResponse(
"Invalid JSON in request body",
status_code=400
)