PDF FastAPI Slides
PDF FastAPI Slides
Unix/Mac OS Windows
CRUD
GET Read method that retrieves data
Classes, Handling
First RESTful API Authentication JWT
Errors
Alembic Deployment
Ask Questions
Ask in Q&A section!
Official
documentation
https://fastapi.tiangolo.com/
Full
RestStack Application
API for data
Web Page Server
CRUD Operations
Create Read Update Delete
Response
CRUD Operations
Create POST
Read GET
Update PUT
Delete DELETE
app = FastAPI()
@app.get(“/api-endpoint”)
async def first_api():
return {‘message’: ‘Hello Eric!’}
@app.get(“/api-endpoint”)
async def first_api():
return {‘message’: ‘Hello Eric!’}
Read
@app.get(“/api-endpoint”)
async def first_api():
Read return {‘message’: ‘Hello Eric!’}
URL : 127.0.0.1:8000
Read @app.get(“/api-endpoint”)
@app.get(“/books”)
async
async def
def read_all_books():
read_all_books():
return
return BOOKS
BOOKS
Get
URL :URL
127.0.0.1:8000/api-endpoint
: 127.0.0.1:8000/books
• Path Parameters are request parameters that have been attached to the
URL
• You can identify the speci c resources based on the le you are in
/Users/codingwithroby/Documents/python/fastapi/section1
Get
RESPONSE:
{
“dynamic_param”: “book_one”
}
Get @app.get(“/books/{dynamic_param}”)
@app.get(“/books/mybook”)
async def read_all_books(dynamic_param):
read_all_books():
return {‘dynamic_param’:
{‘book_title’: ’Mydynamic_param}
Favorite Book’}
Get
@app.get(“/books/{book_title}”)
async def read_book(book_title: str):
for book in BOOKS:
if book.get(‘title’).casefold() ==
book_title.casefold():
RESPONSE:
{
“title”: “Title Four”,
“author”: “Author Four”,
“category”: “math”
}
• Query Parameters are request parameters that have been attached after
a “?”
• Example:
• 127.0.0.1:8000/books/?category=math
@app.get(“/books/”)
async def read_category_by_query(category: str):
books_to_return = []
for book in BOOKS:
if book.get(‘category’).casefold() == category.casefold():
books_to_return.append(book)
return books_to_return
@app.get(“/books/{book_author}/”)
async def read_category_by_query(book_author: str, category: str):
books_to_return = []
for book in BOOKS:
if book.get(‘author’).casefold() == book_author.casefold() and
book.get(‘category’).casefold() == category.casefold():
books_to_return.append(book)
return books_to_return
• POST can have a body that has additional information that GET does
not have
• Example of Body:
• PUT can have a body that has additional information (like POST) that
GET does not have
• Example of Body:
@app.put(“/books/update_book”)
async def update_book(updated_book=Body()):
for i in range(len(BOOKS)):
if BOOKS[i].get(‘title’).casefold() == updated_book.get(‘title’).casefold():
BOOKS[i] = updated_book
Delete
REQUEST:
Delete URL : 127.0.0.1:8000/books/delete_book/{book_title}
@app.delete(“/books/delete_book/{book_title}”)
async def delete_book(book_title: str):
for i in range(len(BOOKS)):
if BOOKS[i].get(‘title’).casefold() == book_title.casefold():
BOOKS.pop(i)
break
Create POST
Read GET
Update PUT
Delete DELETE
• Python library that is used for data modeling, data parsing and has
ef cient error handling.
class BookRequest(BaseModel):
id: int
title: str = Field(min_length=3)
author: str = Field(min_length=1)
description: str = Field(min_length=1, max_length=100)
rating: int = Field(gt=0, lt=5)
@app.post(“/create-book”)
async def create_book(book_request: BookRequest):
new_book = Book(**book_request.dict())
BOOKS.append(new_book)
** operator will pass the key/value from BookRequest() into the Book() constructor
• An HTTP Status Code is used to help the Client (the user or system
submitting data to the server) to understand what happened on the
server side application.
204: No The request has been successful, did not create an entity
nor return anything. Commonly used with PUT requests.
• Hashing Passwords
Database
• Name
• Age
• Email
All of this is Data
• Password
• Since data, on its own, is just data. A database allows management of this
data
• Create
• Read
• Update
• Delete
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A JSON WEB TOKEN?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JSON WEB TOKEN STRUCTURE
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JWT HEADER
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JWT PAYLOAD
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JWT SIGNATURE
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JWT EXAMPLE
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
https://jwt.io
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
https://jwt.io
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JWT PRACTICAL USE CASE
78…
t h 5
y
e7a
App 1
e7a
yth
578
…
App 2
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
PRODUCTION DATABASE INTRODUCTION
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
PRODUCTION DATABASE
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
PRODUCTION DBMS VS SQLITE3
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
PRODUCTION DBMS VS SQLITE3
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
PRODUCTION DBMS KEY NOTES:
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
OVERVIEW OF SECTION (FOR BOTH MYSQL & POSTGRESQL)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
BASIC SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
INSERTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELET THIS IS THE USERS TABLE
Id (PK) email username first_name last_name hashed_passwor is_active
d
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELET THIS IS THE USERS TABLE
Id (PK) email username first_name last_name hashed_passwor is_active
d
1 codingwithroby codingwithroby Eric Roby 123abcEqw!.. 1
@gmail.com
2 exampleuser12 exampleuser Example User Gjjjd!2!.. 1
@example.com
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
INSERTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
INSERTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
STARTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
STARTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
STARTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
STARTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
STARTING DATABASE TABLE (TODOS)
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELETE
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
SELECT SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
SELECT SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
SELECT SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
SELECT SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
SELECT SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
WHERE Clause
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
UPDATE SQL QUERIES
UPDATE Clause
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
1 == True
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
1 == True
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELETE SQL QUERIES
DELETE Clause
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELETE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
DELETE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
ONE TO MANY INTRODUCTION
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A ONE TO MANY RELATIONSHIP
Todo
Todo
User
Todo
Todo
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A ONE TO MANY RELATIONSHIP
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A ONE TO MANY RELATIONSHIP
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A ONE TO MANY RELATIONSHIP
Add new
column
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A ONE TO MANY RELATIONSHIP
Users
Todos
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
FOREIGN KEYS
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS A FOREIGN KEY?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
FOREIGN KEYS
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
FOREIGN KEYS
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
Each API request a user will have their ID attached
If we have the user ID attached to each request, we can
use the ID to find their todos
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHERE SQL QUERIES
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
MYSQL INTRODUCTION
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS MYSQL
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHO USES/USED MYSQL?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
POSTGRESQL INTRODUCTION
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS POSTGRESQL
Production ready
Open-source relational database
management system
Secure
Requires a server
Scalable
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT WILL WE COVER?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHO USES/USED POSTGRESQL?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
ROUTING INTRODUCTION
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT IS ROUTING
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
NEW PROJECT STRUCTURE
TodoApp
TodoApp/routers TodoApp/
main.py company (new)
auth.py companyapis.py
database.py
todos.py dependencies.py
models.py
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
JINJA SCRIPTS
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT JINJA?
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT ARE JINJA TEMPLATING TAGS AND SCRIPTS?
Jinja tags allows developers to be confident while working with backend data, using tags that are similar
to HTML.
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT ARE JINJA TEMPLATING TAGS AND SCRIPTS?
Now image we have a list of todos that we retrieved from the database. We can pass the entire list
of todos into the front-end and loop through each todo with this simple ‘for loop’ on the template.
todos.py
Home.html
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
WHAT ARE JINJA TEMPLATING TAGS AND SCRIPTS?
We can also use Jinja templating language with if else statements. One thing that may stand out is the double brackets with
todos|length
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
LET’S LEARN GIT
Version 2
Version 3
Commit 1
Commit 2
addition subtraction
Functions
New New
Function Function
auth.py styles.css
todos.py home.html
Commit 2
todos.py
auth.py styles.css
new.py
Commit 3
Track Changes
Free and open- Version Control
source distributed Allows team members to use same
version control files without needing to sync every time
system
Version 2
Version 3
Commit 1
Commit 2
stashed
un-stashed
git add .
stashed
un-stashed
git add .
commit
aabbccddee112233445566
python-git-basics Author: Eric Roby
git log “Added Addition Function”
commit
aabbccddee112233445567
Author: Eric Roby
git checkout “First Commit”
aabbccddee112233445567
LET’S CODE TOGETHER © © CODINGWITHROBY
GIT BRANCHES
Multiplication-
master branch
branch
addition addition
subtraction
subtraction
multiplication
multiplication
merge
master branch
git commit –m “adding
git merge multiplication-
multiplication function.”
branch
LET’S CODE TOGETHER © © CODINGWITHROBY
WHAT IS GITHUB?
Git
Focus on Code
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
CONTACT ME!
codingwithroby@gmail.com
Instagram: @codingwithroby
FastAPI
LET’S CODE TOGETHER © CODINGWITHROBY
©
LET'S LEARN PYTHON
Assignment!
Variables!
Comments!
String
Formatting!
User Input!
Lists!
Boolean &
Operators!
If Else!
Loops!
Dictionaries!
Functions!