Deleting entries
- First we need to set up a function that enumerates through all the posts 
def find_index_post(id):
    for i, p in enumerate(my_posts):
        if p['id'] == id:
            return i- The above function: - Iterates through all posts in the "database" by using enumerate 
- This retrieves the index position ( - i) as well as the post (- p)
- If the post id is the same as the id provided to the function, it returns the index position number ( - i- )
 
- Now we can create a - DELETEPath Operation
@app.delete("/posts/{id}")
def delete_post(id: int):
    # Deleting posts
    # find the index in the array that requires the ID
    # my_posts.pop()
    index = find_index_post(id)
    my_posts.pop(index)
    return {"message": f"post with id {id} was successfully deleted"}- This calls the - find_index_postfunction we have defined above and provides it with an id of integer type (from decorator)
- The index number will be "popped" out of the posts 
- Message with the successful deletion will be returned 
Full Code:
from fastapi import FastAPI, Response, status, HTTPException
from typing import Optional
from pydantic import BaseModel
from random import randrange
app = FastAPI()
class Post(BaseModel):
    title: str
    content: str
    published: bool = True
    rating: Optional[int] = None
    
# Global variable to save the post in memory
my_posts = [
    {
    "title": "title of post 1",
    "content": "content of post 1",
    "id": 1
    },
    {
    "title": "favorite foods",
    "content": "Pizza",
    "id": 2
    }
]
    
    
def find_index_post(id):
    for i, p in enumerate(my_posts):
        if p['id'] == id:
            return i
@app.delete("/posts/{id}")
def delete_post(id: int):
    index = find_index_post(id)
    my_posts.pop(index)
    return {"message": f"post with id {id} was successfully deleted"}- If we send now a - DELETEHTTP request via Postman we should be prompted for a message successfully deleted

- If we retrieve all posts from the "database" it should return only the post with ID 2 

- When deleting entries we should be using HTTP Code 204 
- So the way FastAPI works is that we should not be sending any data back with a 204 
- So the new code and HTTP 204 implementation should be: 
@app.delete("/posts/{id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_post(id: int):
    index = find_index_post(id)
    my_posts.pop(index)
    
    return Response(status_code=status.HTTP_204_NO_CONTENT)- If we try to return the info, it will work but will throw an error on the backend side: 
raise RuntimeError("Response content longer than Content-Length")- So what we need to do is grab the response and return no content back 
- After this there shouldn't be any error anymore 
- We are still running into an issue where if you don't provide a ID that exists it will return a HTTP 500 message 

- To get around this we need to implement an exception that raises a HTTP 404 message with post does not exist 
@app.delete("/posts/{id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_post(id: int):
    index = find_index_post(id)
# Handles non-existent IDs
    if index == None:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"post with {id} does not exist")
    my_posts.pop(index)
    return Response(status_code=status.HTTP_204_NO_CONTENT)Last updated