Skip to content

Add code with harry example #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Code With Harry/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.venv
.mypy_cache
__pycache__
3 changes: 3 additions & 0 deletions Code With Harry/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Warninig Plase Don't see this video west of time

[YouTube Video Link](https://youtu.be/52c7Kxp_14E?si=uli6CtFBPcJinPk1)
5 changes: 5 additions & 0 deletions Code With Harry/config/db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from pymongo import MongoClient

MONGO_URI = "mongodb://localhost:27017/"

conn = MongoClient(MONGO_URI)
8 changes: 8 additions & 0 deletions Code With Harry/index.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi import FastAPI
from routes.note import note
from fastapi.staticfiles import StaticFiles


app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
app.include_router(note)
7 changes: 7 additions & 0 deletions Code With Harry/models/note.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from pydantic import BaseModel


class Note(BaseModel):
title: str
desc: str
important: bool = None
5 changes: 5 additions & 0 deletions Code With Harry/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fastapi==0.110.0
uvicorn==0.27.1
Jinja2==3.1.3
pymongo==4.6.2
python-multipart==0.0.9
34 changes: 34 additions & 0 deletions Code With Harry/routes/note.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from models.note import Note
from config.db import conn
from schemas.note import noteEntity, notesEntity
from jinja2 import Template
from fastapi.templating import Jinja2Templates


templates = Jinja2Templates(directory="templates")

note = APIRouter()

@note.get("/", response_class=HTMLResponse)
async def read_item(request: Request):
docs = conn.notes.notes.find({})
newDocs=[]

for doc in docs:
newDocs.append({
"id": doc["_id"],
"title": doc["title"],
"desc": doc["desc"]
})

return templates.TemplateResponse("index.html", {"request": request, "newDocs": newDocs})

@note.post('/')
async def create_item(request: Request):
form = await request.form()
formDict = dict(form)
formDict["important"] = True if formDict.get("important") == "on" else False
note = conn.notes.notes.insert_one(formDict)
return {"Success": True}
10 changes: 10 additions & 0 deletions Code With Harry/schemas/note.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def noteEntity(item) -> dict:
return {
"id": str(item["_id"]),
"title": item["title"],
"desc": item["desc"],
"important": item["important"],
}

def notesEntity(items) -> list:
return [noteEntity(item) for item in items]
69 changes: 69 additions & 0 deletions Code With Harry/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>iNotes - Take your notes easy-peasy!</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container-fluid">
<a class="navbar-brand" href="#">iNotes</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">About</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>

<div class="contaner">
<h1>Start adding your note to the database</h1>

<form action="/" method="post">
<div class="mb-3">
<label for="title" class="form-label">Note Title</label>
<input type="text" class="form-control" id="title" name="title">
</div>
<div class="mb-3">
<label for="desc" class="form-label">Note Description</label>
<input type="text" class="form-control" id="desc" name="desc">
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="important" name="important">
<label class="form-check-label" for="important">Important</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

<div class="container">
<h2>Your Notes</h2>

{% if newDocs is not defined %}
<p>No notes to display</p>
{% endif %}
<div>
{% for item in newDocs %}
<p>{{item.title}}</p>
<p>{{item.desc}}</p>
{% endfor %}
</div>
</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>