2 changed files with 100 additions and 0 deletions
@ -0,0 +1,99 @@ |
|||
# Using the Django ORM with FastAPI |
|||
|
|||
In this guide we'll show you how to use Django's ORM with FastAPI. |
|||
|
|||
This can be extremely useful when migrating from Django to FastAPI, as you can reuse your existing Django models and queries. It's also a great way to take advantage of Django's powerful ORM while using FastAPI's modern features. |
|||
|
|||
This tutorial is based on the Django polls tutorial, but you can apply the same concepts to any Django project. |
|||
|
|||
## Prerequisites |
|||
|
|||
- A Django project like the one created from the [Django polls tutorial](https://docs.djangoproject.com/en/stable/intro/tutorial01/) |
|||
- Basic knowledge of FastAPI |
|||
|
|||
## Step 1: Install FastAPI |
|||
|
|||
First, let's install FastAPI in our Django project: |
|||
|
|||
```bash |
|||
# make sure to run this in your Django virtual environment |
|||
pip install fastapi |
|||
``` |
|||
|
|||
## Step 2: Set up a basic FastAPI application |
|||
|
|||
Create a `main.py` file: |
|||
|
|||
```python |
|||
from fastapi import FastAPI |
|||
|
|||
app = FastAPI() |
|||
``` |
|||
|
|||
In the next steps we'll import the `Question` model from Django, and create a FastAPI endpoint to list all questions. |
|||
|
|||
## Step 3: Import Django models |
|||
|
|||
In your `main.py` file, let's import the `Question` model: |
|||
|
|||
```python |
|||
from polls.models import Question |
|||
``` |
|||
|
|||
Make sure to replace `polls` with the name of your Django app. |
|||
|
|||
## Step 4: Create a FastAPI endpoint |
|||
|
|||
Now let's create a FastAPI endpoint to list all questions: |
|||
|
|||
```python |
|||
@app.get("/questions") |
|||
def get_questions(): |
|||
questions = Question.objects.all() |
|||
|
|||
return [{"question": question.question_text} for question in questions] |
|||
``` |
|||
|
|||
## Step 5: Run the FastAPI application |
|||
|
|||
No we can run the FastAPI application: |
|||
|
|||
```bash |
|||
fastapi dev main.py |
|||
``` |
|||
|
|||
If you go to `http://localhost:8000/questions` we should see the list of questions, right? 🤔 |
|||
|
|||
Unfortunately, we'll get an error: |
|||
|
|||
```text |
|||
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. |
|||
``` |
|||
|
|||
This error happens because Django settings are not configured before importing the Django models. |
|||
|
|||
## Step 6: Configure Django settings |
|||
|
|||
To fix this error, we need to configure Django settings before importing the Django models. |
|||
|
|||
In the `main.py` add the following code **before** importing the Django models: |
|||
|
|||
```python |
|||
import os |
|||
import django |
|||
|
|||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") |
|||
django.setup() |
|||
``` |
|||
|
|||
This will configure Django settings before importing the Django models. |
|||
|
|||
## Step 7: Run the FastAPI application |
|||
|
|||
Now you can run the FastAPI application: |
|||
|
|||
```bash |
|||
fastapi dev main.py |
|||
``` |
|||
|
|||
And now if we go to `http://localhost:8000/questions` we should see a list of questions! 🎉 |
Loading…
Reference in new issue