Feb 6

Creating a Simple Student Information System With FastAPI

In the previous blog, we introduced FastAPI and set up a basic application. Now, let's take the next step and create a simple Student Information System With FastAPI. In this blog post, we'll walk through the process of creating a basic Student Information System using FastAPI. The provided code will define a FastAPI application that allows you to perform CRUD (Create, Read, Update, Delete) operations on a list of students stored in an in-memory database.

Step 1: Importing Required Modules


 
from fastapi import FastAPI, HTTPException
 
from pydantic import BaseModel
 
from typing import List
 

We begin by importing the necessary modules. FastAPI is the main framework for building APIs, HTTPException is used to handle HTTP exceptions, BaseModel is a part of the Pydantic library for data validation, and List is used for typing when dealing with lists.

Step 2: Creating a FastAPI Application


 
app = FastAPI()
 

Here, we create an instance of the FastAPI class. This instance will be the main entry point for our application.

Step 3: Defining an In-Memory Database


 
db = []
 

We initialize an empty list called db to serve as our in-memory database for storing student information.

Step 4: Creating a Pydantic Model for Student


 
class Student(BaseModel):
 
name: str
 
age: int
 
grade: str
 

A Student class is defined, inheriting from BaseModel. It specifies the data model for a student, including attributes like name, age, and grade.

Step 5: Adding a New Student


 
@app.post("/students/", response_model=Student)
 
def add_student(student: Student):
 
db.append(student.dict())
 
return student
 

This route allows us to add a new student to the database. The @app.post decorator specifies that this function handles HTTP POST requests. The response_model parameter indicates the expected response format, and the function appends the student's information to the in-memory database.

Step 6: Getting All Students


 
@app.get("/students/", response_model=List[Student])
 
def get_all_students():
 
return db
 

This route retrieves all students from the database. The @app.get decorator indicates that this function handles HTTP GET requests, and the response_model parameter defines the expected response format as a list of students.

Step 7: Getting a Specific Student by ID


 
@app.get("/students/{id}", response_model=Student)
 
def get_student(id: int):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
return db[id]
 

This route retrieves a specific student from the database based on the provided ID. The @app.get decorator is used with a path parameter ({id}), and the function checks if the ID is within valid bounds. If not, it raises an HTTP exception with a 404 status code.

Step 8: Modifying a Student by ID


 
@app.put("/students/{id}", response_model=Student)
 
def modify_student(id: int, updated_student: Student):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
db[id] = updated_student.dict()
 
return updated_student
 

This route allows us to update the information of a specific student. The @app.put decorator indicates that this function handles HTTP PUT requests. Similar to the previous route, it checks the validity of the provided ID and updates the corresponding student's information.

Step 9: Removing a Student by ID


 
@app.delete("/students/{id}", response_model=List[Student])
 
def remove_student(id: int):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
db.pop(id)
 
return db
 

This route deletes a specific student from the database based on the provided ID. The @app.delete decorator is used, and the function checks the validity of the ID before removing the student. The updated list of students is then returned.

Complete Code

main.py


 
from fastapi import FastAPI, HTTPException
 
from pydantic import BaseModel
 
from typing import List
 

 
# Create an instance of FastAPI
 
app = FastAPI()
 

 
# Define a simple in-memory database for student information
 
db = []
 

 
# Pydantic model for the Student
 
class Student(BaseModel):
 
name: str
 
age: int
 
grade: str
 

 
# Route to add a new student
 
@app.post("/students/", response_model=Student)
 
def add_student(student: Student):
 
db.append(student.dict())
 
return student
 

 
# Route to get all students
 
@app.get("/students/", response_model=List[Student])
 
def get_all_students():
 
return db
 

 
# Route to get a specific student by ID
 
@app.get("/students/{id}", response_model=Student)
 
def get_student(id: int):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
return db[id]
 

 
# Route to modify a student by ID
 
@app.put("/students/{id}", response_model=Student)
 
def modify_student(id: int, updated_student: Student):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
db[id] = updated_student.dict()
 
return updated_student
 

 
# Route to remove a student by ID
 
@app.delete("/students/{id}", response_model=List[Student])
 
def remove_student(id: int):
 
if id < 0 or id >= len(db):
 
raise HTTPException(status_code=404, detail="Student not found")
 
db.pop(id)
 
return db
 

Run the FastAPI App:

In the terminal, execute the following command to start the FastAPI application using Uvicorn:


 
uvicorn main:app --reload
 

The --reload option enables automatic code reloading during development.

Note : all the code are saved in main.py file.

The URL "http://127.0.0.1:8000/students/" corresponds to the endpoint for retrieving all student information in the Student Information System created with FastAPI. In the database dont have any records. We need to first add records (Student information).

running FastAPI app in the browser

Accessing the API:

Open your web browser and navigate to http://127.0.0.1:8000 or http://localhost:8000 to see the FastAPI documentation provided by Swagger UI.

Exploring the API Documentation:

FastAPI generates interactive API documentation. Access Swagger documentation at http://127.0.0.1:8000/docs or ReDoc documentation at http://127.0.0.1:8000/redoc to explore and test API endpoints interactively.

Add Student Information

Let's first add the records to the database. Run this URL http://127.0.0.1:8000/docs. After that, this type of interface will open, as shown in the screenshot below.

FastAPI documentation, particularly the docs route, and it was taken in a browser.

After clicking on Add Student this page will open as shown in the below screenshot. To add the Student information click on the Try it out button.

Add Student information FastAPI documentation 1.1

After clicking on the 'Try it out' button, this page will open. Simply add the student information as demonstrated in the GIF below. Repeat this process as many times as needed to add the desired student information.

Adding Student information

Get Student Information

After adding student information Run This url  "http://127.0.0.1:8000/students/". You can see the Student information in the web browser.

get student information

If you want to display specific student information in the web browser, run this URL 'http://127.0.0.1:8000/students/id'. For example, http://127.0.0.1:8000/students/2.

get student information of a specific student

Update Student Information

To update student information, run this URL http://127.0.0.1:8000/docs. After that, click on the 'Try it out' button, then enter the ID. In the screenshot below, I entered 2. Fill in the information, and finally, click on the 'Execute' button. The information will be updated.

update student information

Updated Information

updated information

Remove Student Information

To Remove student information, run this URL http://127.0.0.1:8000/docs. After that, click on the 'Try it out' button, then enter the ID. In the screenshot below, I entered 2, and finally, click on the 'Execute' button. The information will be deleted.

remove a specific student information

Get all Student Information After removing the student information.

get all student information after removing a specific student information

Now that you've completed the implementation of your basic Student Information System using FastAPI, you've taken a significant step in understanding how to build web APIs with this powerful framework. This simple application provides a foundation that you can expand upon to meet more complex requirements.