Spaces:
Sleeping
Sleeping
Upload 9 files
Browse files- Dockerfile +15 -0
- app.py +70 -0
- create_database.py +47 -0
- models.py +25 -0
- requeriments.txt +0 -0
- routers/review.py +109 -0
- routers/teacher.py +119 -0
- routers/user.py +81 -0
- site.db +0 -0
Dockerfile
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Usa una imagen base de Python
|
2 |
+
FROM python:3.11
|
3 |
+
# Establece el directorio de trabajo
|
4 |
+
WORKDIR /code
|
5 |
+
|
6 |
+
# Copia los archivos necesarios al contenedor
|
7 |
+
COPY ./requirements.txt /code/requirements.txt
|
8 |
+
RUN pip install --no-cache-dir -r /code/requirements.txt
|
9 |
+
|
10 |
+
COPY . .
|
11 |
+
|
12 |
+
RUN chmod -R 777 /code
|
13 |
+
|
14 |
+
# Comando para ejecutar la aplicación
|
15 |
+
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
app.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from fastapi import FastAPI, Depends, HTTPException, status
|
3 |
+
from fastapi.responses import FileResponse
|
4 |
+
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
5 |
+
from fastapi.middleware.cors import CORSMiddleware
|
6 |
+
from dotenv import load_dotenv
|
7 |
+
from create_database import create_db
|
8 |
+
from routers import teacher, review, user
|
9 |
+
|
10 |
+
# Cargar variables de entorno desde el archivo .env
|
11 |
+
load_dotenv()
|
12 |
+
if not os.path.exists("site.db"):
|
13 |
+
create_db()
|
14 |
+
|
15 |
+
# Obtener credenciales de las variables de entorno
|
16 |
+
BASIC_AUTH_USER = os.getenv("BASIC_AUTH_USER")
|
17 |
+
BASIC_AUTH_PASSWORD = os.getenv("BASIC_AUTH_PASSWORD")
|
18 |
+
|
19 |
+
|
20 |
+
app = FastAPI(
|
21 |
+
title="API de revisión de profesores",
|
22 |
+
description="API para revisar profesores",
|
23 |
+
version="2.8.7",
|
24 |
+
openapi_url="/teacher-openapi.json",
|
25 |
+
docs_url="/teacher-docs",
|
26 |
+
redoc_url="/teacher-redoc",
|
27 |
+
contact={
|
28 |
+
"name": "teacher",
|
29 |
+
"url": "https://www.test.com",
|
30 |
+
"email": "calificandoprofesoruniversidad@gmail.com",
|
31 |
+
},
|
32 |
+
license_info={"name": "MIT", "url": "https://opensource.org/licenses/MIT"},
|
33 |
+
)
|
34 |
+
|
35 |
+
# CORS
|
36 |
+
app.add_middleware(
|
37 |
+
CORSMiddleware,
|
38 |
+
allow_origins=["*"],
|
39 |
+
allow_credentials=True,
|
40 |
+
allow_methods=["*"],
|
41 |
+
allow_headers=["*"],
|
42 |
+
)
|
43 |
+
|
44 |
+
security = HTTPBasic()
|
45 |
+
|
46 |
+
|
47 |
+
def authenticate(credentials: HTTPBasicCredentials = Depends(security)):
|
48 |
+
if (
|
49 |
+
credentials.username != BASIC_AUTH_USER
|
50 |
+
or credentials.password != BASIC_AUTH_PASSWORD
|
51 |
+
):
|
52 |
+
raise HTTPException(
|
53 |
+
status_code=status.HTTP_401_UNAUTHORIZED,
|
54 |
+
detail="Credenciales incorrectas",
|
55 |
+
headers={"WWW-Authenticate": "Basic"},
|
56 |
+
)
|
57 |
+
|
58 |
+
|
59 |
+
@app.get(
|
60 |
+
"/",
|
61 |
+
summary="Saludo",
|
62 |
+
description="Saludo de la API",
|
63 |
+
)
|
64 |
+
def read_root():
|
65 |
+
return {"message": "Bienvenido a la API de la revisión de profesores"}
|
66 |
+
|
67 |
+
|
68 |
+
app.include_router(teacher.router, dependencies=[Depends(authenticate)])
|
69 |
+
app.include_router(review.router, dependencies=[Depends(authenticate)])
|
70 |
+
app.include_router(user.router, dependencies=[Depends(authenticate)])
|
create_database.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import sqlite3
|
2 |
+
|
3 |
+
|
4 |
+
def create_db():
|
5 |
+
# Conexión a la base de datos
|
6 |
+
conn = sqlite3.connect("site.db")
|
7 |
+
cursor = conn.cursor()
|
8 |
+
|
9 |
+
# Crear tablas
|
10 |
+
cursor.execute(
|
11 |
+
"""
|
12 |
+
CREATE TABLE IF NOT EXISTS user (
|
13 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
14 |
+
username TEXT UNIQUE NOT NULL,
|
15 |
+
email TEXT UNIQUE NOT NULL,
|
16 |
+
password TEXT NOT NULL
|
17 |
+
)
|
18 |
+
"""
|
19 |
+
)
|
20 |
+
|
21 |
+
cursor.execute(
|
22 |
+
"""
|
23 |
+
CREATE TABLE IF NOT EXISTS teacher (
|
24 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
25 |
+
name TEXT NOT NULL,
|
26 |
+
department TEXT NOT NULL
|
27 |
+
)
|
28 |
+
"""
|
29 |
+
)
|
30 |
+
|
31 |
+
cursor.execute(
|
32 |
+
"""
|
33 |
+
CREATE TABLE IF NOT EXISTS review (
|
34 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
35 |
+
content TEXT NOT NULL,
|
36 |
+
rating INTEGER NOT NULL,
|
37 |
+
date_posted DATETIME NOT NULL DEFAULT (datetime('now')),
|
38 |
+
teacher_id INTEGER NOT NULL,
|
39 |
+
user_id INTEGER,
|
40 |
+
FOREIGN KEY (teacher_id) REFERENCES teacher(id),
|
41 |
+
FOREIGN KEY (user_id) REFERENCES user(id)
|
42 |
+
)
|
43 |
+
"""
|
44 |
+
)
|
45 |
+
|
46 |
+
conn.commit()
|
47 |
+
conn.close()
|
models.py
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel, Field
|
2 |
+
from datetime import datetime
|
3 |
+
from typing import Optional
|
4 |
+
|
5 |
+
|
6 |
+
class User(BaseModel):
|
7 |
+
id: Optional[int] = None
|
8 |
+
username: str = Field(..., max_length=20)
|
9 |
+
email: str = Field(..., max_length=120)
|
10 |
+
password: str = Field(..., max_length=60)
|
11 |
+
|
12 |
+
|
13 |
+
class Teacher(BaseModel):
|
14 |
+
id: int
|
15 |
+
name: str = Field(..., max_length=100)
|
16 |
+
department: str = Field(..., max_length=100)
|
17 |
+
|
18 |
+
|
19 |
+
class Review(BaseModel):
|
20 |
+
id: Optional[int] = None
|
21 |
+
content: str
|
22 |
+
rating: int
|
23 |
+
date_posted: datetime = Field(default_factory=datetime.now)
|
24 |
+
teacher_id: int
|
25 |
+
user_id: Optional[int] = None
|
requeriments.txt
ADDED
File without changes
|
routers/review.py
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
import sqlite3
|
3 |
+
from typing import Optional
|
4 |
+
from fastapi import APIRouter
|
5 |
+
from pydantic import BaseModel, Field
|
6 |
+
|
7 |
+
from models import Review
|
8 |
+
|
9 |
+
router = APIRouter(
|
10 |
+
prefix="/review",
|
11 |
+
tags=["Review"],
|
12 |
+
responses={404: {"description": "Not found"}},
|
13 |
+
)
|
14 |
+
|
15 |
+
"""
|
16 |
+
CREATE TABLE IF NOT EXISTS review (
|
17 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
18 |
+
content TEXT NOT NULL,
|
19 |
+
rating INTEGER NOT NULL,
|
20 |
+
date_posted DATETIME NOT NULL DEFAULT (datetime('now')),
|
21 |
+
teacher_id INTEGER NOT NULL,
|
22 |
+
user_id INTEGER,
|
23 |
+
FOREIGN KEY (teacher_id) REFERENCES teacher(id),
|
24 |
+
FOREIGN KEY (user_id) REFERENCES user(id)
|
25 |
+
)
|
26 |
+
"""
|
27 |
+
|
28 |
+
|
29 |
+
@router.get("/")
|
30 |
+
def get_reviews():
|
31 |
+
"""
|
32 |
+
Get all reviews
|
33 |
+
"""
|
34 |
+
try:
|
35 |
+
conn = sqlite3.connect("site.db")
|
36 |
+
cursor = conn.cursor()
|
37 |
+
cursor.execute("SELECT * FROM review")
|
38 |
+
reviews = cursor.fetchall()
|
39 |
+
conn.close()
|
40 |
+
return reviews
|
41 |
+
except Exception as e:
|
42 |
+
return []
|
43 |
+
|
44 |
+
|
45 |
+
@router.get("/{review_id}")
|
46 |
+
def get_review(review_id: int):
|
47 |
+
"""
|
48 |
+
Get a review by id
|
49 |
+
"""
|
50 |
+
try:
|
51 |
+
conn = sqlite3.connect("site.db")
|
52 |
+
cursor = conn.cursor()
|
53 |
+
cursor.execute("SELECT * FROM review WHERE id=?", (review_id,))
|
54 |
+
review = cursor.fetchone()
|
55 |
+
conn.close()
|
56 |
+
# retornar en formato json
|
57 |
+
review = Review(
|
58 |
+
id=review[0],
|
59 |
+
content=review[1],
|
60 |
+
rating=review[2],
|
61 |
+
date_posted=review[3],
|
62 |
+
teacher_id=review[4],
|
63 |
+
user_id=review[5],
|
64 |
+
)
|
65 |
+
return review
|
66 |
+
except Exception as e:
|
67 |
+
return []
|
68 |
+
|
69 |
+
|
70 |
+
class ReviewPost(BaseModel):
|
71 |
+
content: str
|
72 |
+
rating: int
|
73 |
+
date_posted: datetime = Field(default_factory=datetime.now)
|
74 |
+
teacher_id: int
|
75 |
+
|
76 |
+
|
77 |
+
@router.post("/")
|
78 |
+
def create_review(r: ReviewPost):
|
79 |
+
"""
|
80 |
+
Create a review
|
81 |
+
"""
|
82 |
+
try:
|
83 |
+
conn = sqlite3.connect("site.db")
|
84 |
+
cursor = conn.cursor()
|
85 |
+
cursor.execute(
|
86 |
+
"INSERT INTO review (content, rating, teacher_id, user_id) VALUES (?, ?, ?, ?)",
|
87 |
+
(r.content, r.rating, r.teacher_id, 1),
|
88 |
+
)
|
89 |
+
conn.commit()
|
90 |
+
conn.close()
|
91 |
+
return {"message": "Review created"}
|
92 |
+
except Exception as e:
|
93 |
+
return {"message": "Error creating review"}
|
94 |
+
|
95 |
+
|
96 |
+
@router.get("/search_review/{teacher_id}")
|
97 |
+
def get_reviews_by_teacher(teacher_id: int):
|
98 |
+
"""
|
99 |
+
Get all reviews for a teacher
|
100 |
+
"""
|
101 |
+
try:
|
102 |
+
conn = sqlite3.connect("site.db")
|
103 |
+
cursor = conn.cursor()
|
104 |
+
cursor.execute("SELECT * FROM review WHERE teacher_id=?", (teacher_id,))
|
105 |
+
reviews = cursor.fetchall()
|
106 |
+
conn.close()
|
107 |
+
return reviews
|
108 |
+
except Exception as e:
|
109 |
+
return []
|
routers/teacher.py
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import sqlite3
|
2 |
+
from fastapi import APIRouter
|
3 |
+
from pydantic import BaseModel
|
4 |
+
|
5 |
+
from models import Teacher
|
6 |
+
|
7 |
+
|
8 |
+
router = APIRouter(
|
9 |
+
prefix="/teacher",
|
10 |
+
tags=["Teacher"],
|
11 |
+
responses={404: {"description": "No encontrado"}},
|
12 |
+
)
|
13 |
+
|
14 |
+
"""
|
15 |
+
CREATE TABLE IF NOT EXISTS teacher (
|
16 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
17 |
+
name TEXT NOT NULL,
|
18 |
+
department TEXT NOT NULL
|
19 |
+
)
|
20 |
+
"""
|
21 |
+
|
22 |
+
|
23 |
+
@router.get("/")
|
24 |
+
def get_teachers():
|
25 |
+
"""
|
26 |
+
Get all teachers
|
27 |
+
"""
|
28 |
+
try:
|
29 |
+
conn = sqlite3.connect("site.db")
|
30 |
+
cursor = conn.cursor()
|
31 |
+
cursor.execute("SELECT * FROM teacher")
|
32 |
+
teachers = cursor.fetchall()
|
33 |
+
conn.close()
|
34 |
+
teachers = [Teacher(id=t[0], name=t[1], department=t[2]) for t in teachers]
|
35 |
+
return teachers
|
36 |
+
except Exception as e:
|
37 |
+
return []
|
38 |
+
|
39 |
+
|
40 |
+
@router.get("/{teacher_id}")
|
41 |
+
def get_teacher(teacher_id: int):
|
42 |
+
"""
|
43 |
+
Get a teacher by id
|
44 |
+
"""
|
45 |
+
try:
|
46 |
+
conn = sqlite3.connect("site.db")
|
47 |
+
cursor = conn.cursor()
|
48 |
+
cursor.execute("SELECT * FROM teacher WHERE id=?", (teacher_id,))
|
49 |
+
teacher = cursor.fetchone()
|
50 |
+
conn.close()
|
51 |
+
teacher = Teacher(id=teacher[0], name=teacher[1], department=teacher[2])
|
52 |
+
return teacher
|
53 |
+
except Exception as e:
|
54 |
+
return []
|
55 |
+
|
56 |
+
|
57 |
+
class TeacherPost(BaseModel):
|
58 |
+
name: str
|
59 |
+
department: str
|
60 |
+
|
61 |
+
|
62 |
+
@router.post("/")
|
63 |
+
def create_teacher(t: TeacherPost):
|
64 |
+
"""
|
65 |
+
Create a teacher
|
66 |
+
"""
|
67 |
+
try:
|
68 |
+
conn = sqlite3.connect("site.db")
|
69 |
+
cursor = conn.cursor()
|
70 |
+
cursor.execute(
|
71 |
+
"INSERT INTO teacher (name, department) VALUES (?, ?)",
|
72 |
+
(t.name, t.department),
|
73 |
+
)
|
74 |
+
conn.commit()
|
75 |
+
conn.close()
|
76 |
+
return {"status": "success", "message": "Teacher created"}
|
77 |
+
except Exception as e:
|
78 |
+
return {"status": "error", "message": str(e)}
|
79 |
+
|
80 |
+
|
81 |
+
# search by teacher name
|
82 |
+
@router.get("/search/{teacher_name}")
|
83 |
+
def search_teacher(teacher_name: str):
|
84 |
+
"""
|
85 |
+
Search a teacher by name
|
86 |
+
"""
|
87 |
+
try:
|
88 |
+
conn = sqlite3.connect("site.db")
|
89 |
+
cursor = conn.cursor()
|
90 |
+
cursor.execute(
|
91 |
+
"SELECT * FROM teacher WHERE name LIKE ?", (f"%{teacher_name}%",)
|
92 |
+
)
|
93 |
+
teacher = cursor.fetchall()
|
94 |
+
conn.close()
|
95 |
+
teacher = [Teacher(id=t[0], name=t[1], department=t[2]) for t in teacher]
|
96 |
+
return teacher
|
97 |
+
except Exception as e:
|
98 |
+
return []
|
99 |
+
|
100 |
+
|
101 |
+
# insertar una lista de profesores en la base de datos
|
102 |
+
@router.post("/bulk")
|
103 |
+
def bulk_teacher(teachers: list[TeacherPost]):
|
104 |
+
"""
|
105 |
+
Bulk insert teachers
|
106 |
+
"""
|
107 |
+
try:
|
108 |
+
conn = sqlite3.connect("site.db")
|
109 |
+
cursor = conn.cursor()
|
110 |
+
for t in teachers:
|
111 |
+
cursor.execute(
|
112 |
+
"INSERT INTO teacher (name, department) VALUES (?, ?)",
|
113 |
+
(t.name, t.department),
|
114 |
+
)
|
115 |
+
conn.commit()
|
116 |
+
conn.close()
|
117 |
+
return {"status": "success", "message": "Teachers created"}
|
118 |
+
except Exception as e:
|
119 |
+
return {"status": "error", "message": str(e)}
|
routers/user.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import sqlite3
|
2 |
+
from typing import Optional
|
3 |
+
from fastapi import APIRouter
|
4 |
+
from pydantic import BaseModel, Field
|
5 |
+
|
6 |
+
from models import User
|
7 |
+
|
8 |
+
router = APIRouter(
|
9 |
+
prefix="/user",
|
10 |
+
tags=["User"],
|
11 |
+
responses={404: {"description": "Not found"}},
|
12 |
+
)
|
13 |
+
|
14 |
+
"""
|
15 |
+
CREATE TABLE IF NOT EXISTS user (
|
16 |
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
17 |
+
username TEXT UNIQUE NOT NULL,
|
18 |
+
email TEXT UNIQUE NOT NULL,
|
19 |
+
password TEXT NOT NULL
|
20 |
+
)
|
21 |
+
"""
|
22 |
+
|
23 |
+
|
24 |
+
@router.get("/")
|
25 |
+
def get_users():
|
26 |
+
"""
|
27 |
+
Get all users
|
28 |
+
"""
|
29 |
+
try:
|
30 |
+
conn = sqlite3.connect("site.db")
|
31 |
+
cursor = conn.cursor()
|
32 |
+
cursor.execute("SELECT * FROM user")
|
33 |
+
users = cursor.fetchall()
|
34 |
+
conn.close()
|
35 |
+
users = [User(id=u[0], username=u[1], email=u[2], password=u[3]) for u in users]
|
36 |
+
return users
|
37 |
+
except Exception as e:
|
38 |
+
return []
|
39 |
+
|
40 |
+
|
41 |
+
@router.get("/{user_id}")
|
42 |
+
def get_user(user_id: int):
|
43 |
+
"""
|
44 |
+
Get a user by id
|
45 |
+
"""
|
46 |
+
try:
|
47 |
+
conn = sqlite3.connect("site.db")
|
48 |
+
cursor = conn.cursor()
|
49 |
+
cursor.execute("SELECT * FROM user WHERE id=?", (user_id,))
|
50 |
+
user = cursor.fetchone()
|
51 |
+
conn.close()
|
52 |
+
user = User(id=user[0], username=user[1], email=user[2], password=user[3])
|
53 |
+
return user
|
54 |
+
except Exception as e:
|
55 |
+
return []
|
56 |
+
|
57 |
+
|
58 |
+
class UserPost(BaseModel):
|
59 |
+
id: Optional[int] = None
|
60 |
+
username: str = Field(..., max_length=20)
|
61 |
+
email: str = Field(..., max_length=120)
|
62 |
+
password: str = Field(..., max_length=60)
|
63 |
+
|
64 |
+
|
65 |
+
@router.post("/")
|
66 |
+
def create_user(u: User):
|
67 |
+
"""
|
68 |
+
Create a user
|
69 |
+
"""
|
70 |
+
try:
|
71 |
+
conn = sqlite3.connect("site.db")
|
72 |
+
cursor = conn.cursor()
|
73 |
+
cursor.execute(
|
74 |
+
"INSERT INTO user (username, email, password) VALUES (?, ?, ?)",
|
75 |
+
(u.username, u.email, u.password),
|
76 |
+
)
|
77 |
+
conn.commit()
|
78 |
+
conn.close()
|
79 |
+
return {"message": "User created"}
|
80 |
+
except Exception as e:
|
81 |
+
return {"message": "Error"}
|
site.db
ADDED
Binary file (28.7 kB). View file
|
|