Skip to content

Commit c625bef

Browse files
committed
Backend: Día 6
1 parent 0530f41 commit c625bef

14 files changed

+57
-60
lines changed
0 Bytes
Binary file not shown.
Binary file not shown.

Backend/FastAPI/db/client.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,17 @@
1010

1111
from pymongo import MongoClient
1212

13-
db_client = MongoClient()
13+
# Descomentar el db_client local o remoto correspondiente
14+
15+
# Base de datos local MongoDB
16+
db_client = MongoClient().local
17+
18+
# Clase en vídeo (28/12/2022): https://www.twitch.tv/videos/1691208894
19+
20+
# Base de datos remota MongoDB Atlas (https://mongodb.com)
21+
# db_client = MongoClient(
22+
# "mongodb+srv://<user>:<password>@<url>/?retryWrites=true&w=majority").test
23+
24+
# Despliegue API en la nube:
25+
# Deta - https://www.deta.sh/
26+
# Intrucciones - https://fastapi.tiangolo.com/deployment/deta/
Binary file not shown.

Backend/FastAPI/db/models/user.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
### User model ###
44

55
from pydantic import BaseModel
6+
from typing import Optional
67

78

89
class User(BaseModel):
9-
id: str | None
10+
id: Optional[str]
1011
username: str
1112
email: str
Binary file not shown.

Backend/FastAPI/requirements.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Clase en vídeo (28/12/2022): https://www.twitch.tv/videos/1691208894
2+
fastapi
3+
python-jose
4+
passlib
5+
bcrypt
6+
pymongo
7+
python-multipart
Binary file not shown.
Binary file not shown.
Binary file not shown.

Backend/FastAPI/routers/basic_auth_users.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
from pydantic import BaseModel
77
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
88

9-
router = APIRouter()
9+
router = APIRouter(prefix="/basicauth",
10+
tags=["basicauth"],
11+
responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
1012

1113
oauth2 = OAuth2PasswordBearer(tokenUrl="login")
1214

Backend/FastAPI/routers/jwt_auth_users.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
ACCESS_TOKEN_DURATION = 1
1414
SECRET = "201d573bd7d1344d3a3bfce1550b69102fd11be3db6d379508b6cccc58ea230b"
1515

16-
router = APIRouter()
16+
router = APIRouter(prefix="/jwtauth",
17+
tags=["jwtauth"],
18+
responses={status.HTTP_404_NOT_FOUND: {"message": "No encontrado"}})
1719

1820
oauth2 = OAuth2PasswordBearer(tokenUrl="login")
1921

@@ -88,6 +90,7 @@ async def current_user(user: User = Depends(auth_user)):
8890

8991
@router.post("/login")
9092
async def login(form: OAuth2PasswordRequestForm = Depends()):
93+
9194
user_db = users_db.get(form.username)
9295
if not user_db:
9396
raise HTTPException(

Backend/FastAPI/routers/users_db.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@router.get("/", response_model=list[User])
1717
async def users():
18-
return users_schema(db_client.local.users.find())
18+
return users_schema(db_client.users.find())
1919

2020

2121
@router.get("/{id}") # Path
@@ -37,9 +37,9 @@ async def user(user: User):
3737
user_dict = dict(user)
3838
del user_dict["id"]
3939

40-
id = db_client.local.users.insert_one(user_dict).inserted_id
40+
id = db_client.users.insert_one(user_dict).inserted_id
4141

42-
new_user = user_schema(db_client.local.users.find_one({"_id": id}))
42+
new_user = user_schema(db_client.users.find_one({"_id": id}))
4343

4444
return User(**new_user)
4545

@@ -51,7 +51,7 @@ async def user(user: User):
5151
del user_dict["id"]
5252

5353
try:
54-
db_client.local.users.find_one_and_replace(
54+
db_client.users.find_one_and_replace(
5555
{"_id": ObjectId(user.id)}, user_dict)
5656
except:
5757
return {"error": "No se ha actualizado el usuario"}
@@ -62,7 +62,7 @@ async def user(user: User):
6262
@router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT)
6363
async def user(id: str):
6464

65-
found = db_client.local.users.find_one_and_delete({"_id": ObjectId(id)})
65+
found = db_client.users.find_one_and_delete({"_id": ObjectId(id)})
6666

6767
if not found:
6868
return {"error": "No se ha eliminado el usuario"}
@@ -73,7 +73,7 @@ async def user(id: str):
7373
def search_user(field: str, key):
7474

7575
try:
76-
user = db_client.local.users.find_one({field: key})
76+
user = db_client.users.find_one({field: key})
7777
return User(**user_schema(user))
7878
except:
7979
return {"error": "No se ha encontrado el usuario"}

README.md

+21-50
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,11 @@
99
![](./Images/header.jpg)
1010

1111
### Proyecto realizado durante emisiones en directo desde [Twitch](https://twitch.tv/mouredev)
12+
> ##### Si consideras útil el curso, apóyalo haciendo "★ Star" en el repositorio. ¡Gracias!
1213
1314

14-
15-
### 🐍 CADA SEMANA UNA NUEVA CLASE EN DIRECTO 🐍
16-
##### Si consideras útil esta actividad, apóyala haciendo "★ Star" en el repositorio. ¡Gracias!
17-
18-
> ---
19-
> Estoy llevando a cabo un CURSO DESDE CERO gratis para aprender PYTHON en BACKEND.
20-
>
21-
> **🔴 SIGUIENTE CLASE: Miércoles 28 de Diciembre a las 20:00 (hora España)**
22-
23-
> 🗓 En [Discord](https://discord.gg/mouredev) tienes creado un [evento](https://discord.gg/mouredev?event=1055759221637009508) para que consultes la hora de tu país y añadas un recordatorio.
24-
>
25-
> Mientras, aprovecha para practicar unos [retos de programación](https://retosdeprogramacion.com/semanales2022) y así ir mejorando poco a poco.
26-
>
27-
> *Finalizada la clase, se actualizará el repositorio con los nuevos recursos*
28-
>
29-
> ---
30-
3115
## Clases en vídeo
3216

33-
### [EN CURSO] Backend desde cero
34-
35-
Curso en el que aprenderemos a utilizar Python para backend e implementaremos un API REST con autenticación, base de datos y desplegaremos el proyecto en un servidor real.
36-
37-
> Código: Directorio "Backend" en el proyecto
38-
39-
* [Clase 1 - 24/11/2022 - Hola Mundo en FastAPI](https://www.twitch.tv/videos/1661716599)
40-
* [Clase 2 - 01/12/2022 - Operaciones con GET y peticiones HTTP](https://www.twitch.tv/videos/1667582141)
41-
* [Clase 3 - 08/12/2022 - Operaciones con POST, PUT, DELETE, códigos HTTP y Routers](https://www.twitch.tv/videos/1673759045)
42-
* [Clase 4 - 14/12/2022 - Recursos estáticos y Autorización OAuth2](https://www.twitch.tv/videos/1679022882)
43-
* [Clase 5 - 22/12/2022 - Base de datos con MongoDB](https://www.twitch.tv/videos/1686104006)
44-
4517
### Curso de fundamentos desde cero
4618

4719
Curso que agrupa todas las clases en directo que hacen referencia a los fundamentos de Python.
@@ -89,42 +61,41 @@ Curso en el que continuamos aprendiendo Python desde sus bases, siguiendo la rut
8961
* [Lección 9 - Manejo de paquetes](https://youtu.be/TbcEqkabAWU?t=24010)
9062
* [Próximos pasos](https://youtu.be/TbcEqkabAWU?t=26228)
9163

92-
## Información importante y preguntas frecuentes
64+
### Backend desde cero
9365

94-
* **¿Cómo está estructurado el proyecto y el código?**
95-
* Actualmente tienes tres directorios, "Basic", "Intermediate" y "Backend", correspondientes a cómo están agrupados los cursos.
66+
Curso en el que aprenderemos a utilizar Python para backend e implementaremos un API REST con autenticación, base de datos y desplegaremos el proyecto en un servidor real.
9667

97-
* **¿Las clases nuevas quedan grabadas?**
98-
* Todos los directos de Twitch están disponibles 60 días en la sección [vídeos](https://twitch.tv/mouredev/videos).
68+
> Código: Directorio "Backend" en el proyecto
9969
100-
* **¿Puedo asistir a las clases en directo si no he visto las anteriores?**
101-
* Sí. Son clases independientes en las que hablo de nuevo de conceptos anteriores para que se entiendan de nuevo. Por supuesto, es recomendable que poco a poco visualices las clases anteriores.
70+
* [Clase 1 - 24/11/2022 - Hola Mundo en FastAPI](https://www.twitch.tv/videos/1661716599)
71+
* [Clase 2 - 01/12/2022 - Operaciones con GET y peticiones HTTP](https://www.twitch.tv/videos/1667582141)
72+
* [Clase 3 - 08/12/2022 - Operaciones con POST, PUT, DELETE, códigos HTTP y Routers](https://www.twitch.tv/videos/1673759045)
73+
* [Clase 4 - 14/12/2022 - Recursos estáticos y Autorización OAuth2](https://www.twitch.tv/videos/1679022882)
74+
* [Clase 5 - 22/12/2022 - Base de datos con MongoDB](https://www.twitch.tv/videos/1686104006)
75+
* [Clase 6 - 28/12/2022 - Despliegue en la nube usando MongoDB Atrlas y Deta](https://www.twitch.tv/videos/1691208894)
10276

103-
* **¿Se subirá a YouTube?**
104-
* No te preocupes, antes de que se cumplan los 60 días de Twitch, iré publicando las clases agrupadas en YouTube.
77+
**Muy pronto curso editado en YouTube...**
10578

106-
* **¿Harás un curso?**
107-
* Agruparé lecciones en YouTube para crear cursos por nivel. Actualmente ya existe el de [fundamentos desde cero](https://youtu.be/Kp4Mvapo5kc) e [intermedio](https://youtu.be/TbcEqkabAWU).
79+
## Información importante y preguntas frecuentes
80+
81+
Actualmente el curso está en pausa. Se han finalizados los bloques básico, intermedio y backend, y ese era el objetivo inicial del proyecto.
82+
No descarto añadir nuevas lecciones a futuro, pero creo que por el momento puede servir de base a cualquier persona que quiera empezar a aprender este lenguaje.
10883

109-
* **¿Hasta dónde llegará el curso?**
110-
* Mi idea es repasar los conceptos básicos hasta llegar a crear un backend (en principio).
84+
* Recuerda que he creado en el [Discord](https://discord.gg/mouredev) un canal "🐍python" para que puedas comentar lo que quieras.
85+
* En el momento que el curso continúe, actualizaré el repositorio y avisaré en redes.
11186

112-
* **¿Cuándo será la próxima clase?**
113-
* Te recomiendo que me sigas en redes, sobre todo en [Discord](https://discord.gg/mouredev) e [Instagram](https://instagram.com/mouredev) donde creo eventos a diario con la hora de emisión (así podrás ver qué hora es en tu país).
114-
* También he creado en el Discord un canal "🐍curso-python" para que puedas comentar lo que quieras.
115-
* Una vez finalizada la clase subiré los ficheros de código a este repositorio.
87+
¡Muchísimas gracias por todo el apoyo mostrado!
11688

117-
---
89+
## Enlaces de interés
11890

119-
### Enlaces de interés
12091
* [Web oficial de Python](https://www.python.org/)
12192
* [Tutorial oficial de Python en Español](https://docs.python.org/es/3/tutorial/index.html)
12293
* [Repo 30 días de Python](https://github.com/Asabeneh/30-Days-Of-Python)
12394
* [Juego Codédex para aprender Python](https://www.codedex.io/)
12495
* [Visual Studio Code](https://code.visualstudio.com/): El editor que estoy usando
12596
* [FastAPI](https://fastapi.tiangolo.com/es/): El framework para crear nuestra API Backend
126-
127-
---
97+
* [MongoDB](https://www.mongodb.com/): La base de datos que utiliza nuestro backend
98+
* [Deta](https://www.deta.sh/): Para desplegar nuestra API en la nube
12899

129100
#### Puedes apoyar mi trabajo haciendo "☆ Star" en el repo o nominarme a "GitHub Star". ¡Gracias!
130101

0 commit comments

Comments
 (0)