fixing trashbox
This commit is contained in:
parent
73eaf00b96
commit
f25ac9aa0d
120
back/api.py
120
back/api.py
@ -41,23 +41,23 @@ app.mount("/uploads", StaticFiles(directory = "./uploads"))
|
|||||||
# add_poems_to_db(database)
|
# add_poems_to_db(database)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/announcements", response_model=List[schemas.Announcement])#адрес объявлений
|
@app.get("/api/announcements", response_model=List[schemas.Announcement], db: Annotated[Session, Depends(utils.get_db)])#адрес объявлений
|
||||||
def announcements_list(obsolete: Union[bool, None] = False, user_id: Union[int, None] = None, metro: Union[str, None] = None,
|
def announcements_list(obsolete: Union[bool, None] = False, user_id: Union[int, None] = None, metro: Union[str, None] = None,
|
||||||
category: Union[str, None] = None):
|
category: Union[str, None] = None):
|
||||||
# параметры для сортировки (схема pydantic schemas.SortAnnouncements)
|
# параметры для сортировки (схема pydantic schemas.SortAnnouncements)
|
||||||
params_to_sort = schemas.SortAnnouncements(obsolete=obsolete, user_id=user_id, metro=metro, category=category)
|
params_to_sort = schemas.SortAnnouncements(obsolete=obsolete, user_id=user_id, metro=metro, category=category)
|
||||||
# получаем результат
|
# получаем результат
|
||||||
result = get_query_results(db=database, schema=params_to_sort)
|
result = get_query_results(db=db, schema=params_to_sort)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/announcement")#адрес объявления
|
@app.get("/api/announcement") #
|
||||||
def single_announcement(user_id:int):
|
def single_announcement(ann_id:int, db: Annotated[Session, Depends(utils.get_db)]): # передаем индекс обявления
|
||||||
# Считываем данные из Body и отображаем их на странице.
|
# Считываем данные из Body и отображаем их на странице.
|
||||||
# В последствии будем вставлять данные в html-форму
|
# В последствии будем вставлять данные в html-форму
|
||||||
try:
|
try:
|
||||||
announcement = database.get(models.Announcement, user_id)
|
announcement = db.get(models.Announcement, ann_id)
|
||||||
return {"id": announcement.id, "user_id": announcement.user_id, "name": announcement.name,
|
return {"id": announcement.id, "user_id": announcement.user_id, "name": announcement.name,
|
||||||
"category": announcement.category, "best_by": announcement.best_by, "address": announcement.address,
|
"category": announcement.category, "best_by": announcement.best_by, "address": announcement.address,
|
||||||
"description": announcement.description, "metro": announcement.metro, "latitude": announcement.latitude,
|
"description": announcement.description, "metro": announcement.metro, "latitude": announcement.latitude,
|
||||||
@ -72,7 +72,7 @@ def single_announcement(user_id:int):
|
|||||||
def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], bestBy: Annotated[datetime.date, Form()],
|
def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], bestBy: Annotated[datetime.date, Form()],
|
||||||
address: Annotated[str, Form()], longtitude: Annotated[float, Form()], latitude: Annotated[float, Form()],
|
address: Annotated[str, Form()], longtitude: Annotated[float, Form()], latitude: Annotated[float, Form()],
|
||||||
description: Annotated[str, Form()], metro: Annotated[str, Form()], current_user: Annotated[schemas.User, Depends(utils.get_current_active_user)],
|
description: Annotated[str, Form()], metro: Annotated[str, Form()], current_user: Annotated[schemas.User, Depends(utils.get_current_active_user)],
|
||||||
src: Union[UploadFile, None] = None, trashId: Annotated[int, Form()] = None):
|
src: Union[UploadFile, None] = None, trashId: Annotated[int, Form()] = None, db: Annotated[Session, Depends(utils.get_db)]):
|
||||||
try:
|
try:
|
||||||
uploaded_name = ""
|
uploaded_name = ""
|
||||||
if src:
|
if src:
|
||||||
@ -89,9 +89,9 @@ def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], be
|
|||||||
temp_ancmt = models.Announcement(user_id=current_user.id, name=name, category=category, best_by=bestBy,
|
temp_ancmt = models.Announcement(user_id=current_user.id, name=name, category=category, best_by=bestBy,
|
||||||
address=address, longtitude=longtitude, latitude=latitude, description=description, metro=metro,
|
address=address, longtitude=longtitude, latitude=latitude, description=description, metro=metro,
|
||||||
trashId=trashId, booked_by=0)
|
trashId=trashId, booked_by=0)
|
||||||
database.add(temp_ancmt) # добавляем в бд
|
db.add(temp_ancmt) # добавляем в бд
|
||||||
database.commit() # сохраняем изменения
|
db.commit() # сохраняем изменения
|
||||||
database.refresh(temp_ancmt) # обновляем состояние объекта
|
db.refresh(temp_ancmt) # обновляем состояние объекта
|
||||||
return {"Answer" : True}
|
return {"Answer" : True}
|
||||||
except:
|
except:
|
||||||
return {"Answer" : False}
|
return {"Answer" : False}
|
||||||
@ -99,11 +99,11 @@ def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form()], be
|
|||||||
|
|
||||||
# Удалить объявления из базы
|
# Удалить объявления из базы
|
||||||
@app.delete("/api/announcement") #адрес объявления
|
@app.delete("/api/announcement") #адрес объявления
|
||||||
def delete_from_db(announcement: schemas.DelAnnouncement): # функция удаления объекта из БД
|
def delete_from_db(announcement: schemas.DelAnnouncement, db: Annotated[Session, Depends(utils.get_db)]): # функция удаления объекта из БД
|
||||||
try:
|
try:
|
||||||
to_delete = database.query(models.Announcement).filter(models.Announcement.id==announcement.id).first()
|
to_delete = db.query(models.Announcement).filter(models.Announcement.id==announcement.id).first()
|
||||||
database.delete(to_delete) # удаление из БД
|
db.delete(to_delete) # удаление из БД
|
||||||
database.commit() # сохраняем изменения
|
db.commit() # сохраняем изменения
|
||||||
return {"Answer" : True}
|
return {"Answer" : True}
|
||||||
except:
|
except:
|
||||||
return {"Answer" : False}
|
return {"Answer" : False}
|
||||||
@ -111,37 +111,45 @@ def delete_from_db(announcement: schemas.DelAnnouncement): # функция
|
|||||||
|
|
||||||
# Забронировать объявление
|
# Забронировать объявление
|
||||||
@app.post("/api/book")
|
@app.post("/api/book")
|
||||||
def change_book_status(data: schemas.Book):
|
def change_book_status(data: schemas.Book, current_user: Annotated[schemas.User, Depends(utils.get_current_user)],
|
||||||
try:
|
db: Annotated[Session, Depends(utils.get_db)], db: Annotated[Session, Depends(utils.get_db)]):
|
||||||
# Находим объявление по данному id
|
# Находим объявление по данному id
|
||||||
announcement_to_change = database.query(models.Announcement).filter(Announcement.id == data.id).first()
|
announcement_to_change = db.query(models.Announcement).filter(Announcement.id == data.id).first()
|
||||||
# Изменяем поле booked_status на полученный id
|
# Проверяем, что объявление с данным id существует
|
||||||
announcement_to_change.booked_status += 1
|
if not announcement_to_change:
|
||||||
return {"Success": True}
|
raise HTTPException(status_code=404, detail="Item not found")
|
||||||
except:
|
# Проверяем, что объявление бронирует не владелец
|
||||||
return {"Success": False}
|
if current_user.id == announcement_to_change.user_id:
|
||||||
|
raise HTTPException(status_code=403, detail="A user can't book his announcement")
|
||||||
|
else:
|
||||||
|
# Инкрементируем поле booked_by на 1
|
||||||
|
announcement_to_change.booked_by += 1
|
||||||
|
db.commit()
|
||||||
|
db.refresh(announcement_to_change)
|
||||||
|
return {"Success": True}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# reginstration
|
# reginstration
|
||||||
@app.post("/api/signup")
|
@app.post("/api/signup")
|
||||||
def create_user(nickname: Annotated[str, Form()], password: Annotated[str, Form()], name: Annotated[str, Form()]=None,
|
def create_user(nickname: Annotated[str, Form()], password: Annotated[str, Form()], name: Annotated[str, Form()]=None,
|
||||||
surname: Annotated[str, Form()]=None, avatar: Annotated[UploadFile, Form()]=None):
|
surname: Annotated[str, Form()]=None, avatar: Annotated[UploadFile, Form()]=None, db: Annotated[Session, Depends(utils.get_db)]):
|
||||||
|
|
||||||
if database.query(models.User).filter(models.User.nickname == nickname).first() == None:
|
if db.query(models.User).filter(models.User.nickname == nickname).first() == None:
|
||||||
new_user = models.User(nickname=nickname, hashed_password=utils.get_password_hash(password),
|
new_user = models.User(nickname=nickname, hashed_password=utils.get_password_hash(password),
|
||||||
name=name, surname=surname, reg_date=datetime.date.today())
|
name=name, surname=surname, reg_date=datetime.date.today())
|
||||||
database.add(new_user)
|
db.add(new_user)
|
||||||
database.commit()
|
db.commit()
|
||||||
database.refresh(new_user) # обновляем состояние объекта
|
db.refresh(new_user) # обновляем состояние объекта
|
||||||
return {"Success": True}
|
return {"Success": True}
|
||||||
return {"Success": False, "Message": "Пользователь с таким email уже зарегестрирован"}
|
return {"Success": False, "Message": "Пользователь с таким email уже зарегестрирован"}
|
||||||
|
|
||||||
|
|
||||||
@app.post("/api/token", response_model=schemas.Token)
|
@app.post("/api/token", response_model=schemas.Token)
|
||||||
async def login_for_access_token(
|
async def login_for_access_token(
|
||||||
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
form_data: Annotated[OAuth2PasswordRequestForm, Depends()], db: Annotated[Session, Depends(utils.get_db)]
|
||||||
):
|
):
|
||||||
user = utils.authenticate_user(database, form_data.username, form_data.password)
|
user = utils.authenticate_user(db, form_data.username, form_data.password)
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
@ -160,24 +168,17 @@ async def read_users_me(current_user: Annotated[schemas.User, Depends(utils.get_
|
|||||||
return current_user
|
return current_user
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/users/me/items")
|
|
||||||
async def read_own_items(
|
|
||||||
current_user: Annotated[schemas.User, Depends(utils.get_current_active_user)]
|
|
||||||
):
|
|
||||||
return [{"Current user name": current_user.name, "Current user surname": current_user.surname}]
|
|
||||||
|
|
||||||
|
|
||||||
# изменяем рейтинг пользователя
|
# изменяем рейтинг пользователя
|
||||||
@app.post("/api/user/rating")
|
@app.post("/api/user/rating")
|
||||||
def add_points(data: schemas.AddRating, current_user: Annotated[schemas.User, Depends(utils.get_current_user)]):
|
def add_points(data: schemas.AddRating, current_user: Annotated[schemas.User, Depends(utils.get_current_user)], db: Annotated[Session, Depends(utils.get_db)]):
|
||||||
if current_user.id != data.user_id:
|
if current_user.id != data.user_id:
|
||||||
user = utils.get_user_by_id(db=database, user_id=data.user_id)
|
user = utils.get_user_by_id(db, data.user_id)
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(status_code=404, detail="Item not found")
|
raise HTTPException(status_code=404, detail="Item not found")
|
||||||
user.rating = (user.rating*user.num_of_ratings + data.rate)/(user.num_of_ratings + 1)
|
user.rating = (user.rating*user.num_of_ratings + data.rate)/(user.num_of_ratings + 1)
|
||||||
user.num_of_ratings += 1
|
user.num_of_ratings += 1
|
||||||
database.commit()
|
db.commit()
|
||||||
database.refresh(user) # обновляем состояние объекта
|
db.refresh(user) # обновляем состояние объекта
|
||||||
return {"Success": True}
|
return {"Success": True}
|
||||||
|
|
||||||
|
|
||||||
@ -192,12 +193,12 @@ def add_points(user_id: int, db: Annotated[Session, Depends(utils.get_db)]):
|
|||||||
|
|
||||||
# Отправляем стихи
|
# Отправляем стихи
|
||||||
@app.get("/api/user/poem") # пока не работает
|
@app.get("/api/user/poem") # пока не работает
|
||||||
def poems_to_front(): # db: Annotated[Session, Depends(utils.get_db)]
|
def poems_to_front(db: Annotated[Session, Depends(utils.get_db)]): # db: Annotated[Session, Depends(utils.get_db)]
|
||||||
kolvo_stixov = database.query(models.Poems).count() # пока количество стихотворений = 101
|
kolvo_stixov = db.query(models.Poems).count() # пока количество стихотворений = 101
|
||||||
if kolvo_stixov > 1:
|
if kolvo_stixov > 1:
|
||||||
rand_id = random.randint(1, kolvo_stixov) # номер стихотворения
|
rand_id = random.randint(1, kolvo_stixov) # номер стихотворения
|
||||||
poem_json = dict()
|
poem_json = dict()
|
||||||
poem = database.query(models.Poems).filter(models.Poems.id == rand_id).first()
|
poem = db.query(models.Poems).filter(models.Poems.id == rand_id).first()
|
||||||
poem_json = {"id": rand_id, "title": poem.title, "text": poem.text, "author": poem.author}
|
poem_json = {"id": rand_id, "title": poem.title, "text": poem.text, "author": poem.author}
|
||||||
return poem_json
|
return poem_json
|
||||||
else:
|
else:
|
||||||
@ -206,17 +207,38 @@ def poems_to_front(): # db: Annotated[Session, Depends(utils.get_db)]
|
|||||||
|
|
||||||
@app.get("/api/trashbox", response_model=List[schemas.TrashboxResponse])
|
@app.get("/api/trashbox", response_model=List[schemas.TrashboxResponse])
|
||||||
def get_trashboxes(data: schemas.TrashboxRequest):#крутая функция для работы с api
|
def get_trashboxes(data: schemas.TrashboxRequest):#крутая функция для работы с api
|
||||||
BASE_URL='https://geointelect2.gate.petersburg.ru'#адрес сайта и мой токин
|
# json, передаваемый стороннему API
|
||||||
my_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhU1RaZm42bHpTdURYcUttRkg1SzN5UDFhT0FxUkhTNm9OendMUExaTXhFIn0.eyJleHAiOjE3ODM3ODk4NjgsImlhdCI6MTY4OTA5NTQ2OCwianRpIjoiNDUzNjQzZTgtYTkyMi00NTI4LWIzYmMtYWJiYTNmYjkyNTkxIiwiaXNzIjoiaHR0cHM6Ly9rYy5wZXRlcnNidXJnLnJ1L3JlYWxtcy9lZ3MtYXBpIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJjYjQ2NzljLTU3ZGItNDU5ZC1iNWUxLWRlOGI4Yzg5MTMwMyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLXJlc3QtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImM2ZDJiOTZhLWMxNjMtNDAxZS05ZjMzLTI0MmE0NDcxMDY5OCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtZWdzLWFwaSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJzaWQiOiJjNmQyYjk2YS1jMTYzLTQwMWUtOWYzMy0yNDJhNDQ3MTA2OTgiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiLQktC70LDQtNC40LzQuNGAINCv0LrQvtCy0LvQtdCyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiZTBmYzc2OGRhOTA4MjNiODgwZGQzOGVhMDJjMmQ5NTciLCJnaXZlbl9uYW1lIjoi0JLQu9Cw0LTQuNC80LjRgCIsImZhbWlseV9uYW1lIjoi0K_QutC-0LLQu9C10LIifQ.E2bW0B-c6W5Lj63eP_G8eI453NlDMnW05l11TZT0GSsAtGayXGaolHtWrmI90D5Yxz7v9FGkkCmcUZYy1ywAdO9dDt_XrtFEJWFpG-3csavuMjXmqfQQ9SmPwDw-3toO64NuZVv6qVqoUlPPj57sLx4bLtVbB4pdqgyJYcrDHg7sgwz4d1Z3tAeUfSpum9s5ZfELequfpLoZMXn6CaYZhePaoK-CxeU3KPBPTPOVPKZZ19s7QY10VdkxLULknqf9opdvLs4j8NMimtwoIiHNBFlgQz10Cr7bhDKWugfvSRsICouniIiBJo76wrj5T92s-ztf1FShJuqnQcKE_QLd2A'
|
head = {'Authorization': 'Bearer {}'.format(service.my_token)}
|
||||||
head = {'Authorization': 'Bearer {}'.format(my_token)}
|
# Данные пользователя (местоположение, количество мусорок, которое пользователь хочет видеть)
|
||||||
|
|
||||||
my_data={
|
my_data={
|
||||||
'x' : f"{data.Lng}",
|
'x' : f"{data.Lng}",
|
||||||
'y' : f"{data.Lat}",
|
'y' : f"{data.Lat}",
|
||||||
'limit' : '1'
|
'limit' : '1'
|
||||||
}
|
}
|
||||||
|
|
||||||
response = requests.post(f"{BASE_URL}/nearest_recycling/get", headers=head, data=my_data)
|
|
||||||
|
list_of_category = [] # лист по которому будет отбираться uniq_trashboxes
|
||||||
|
match category:
|
||||||
|
|
||||||
|
case "PORRIDGE":
|
||||||
|
list_of_category=["Опасные отходы", "Иное"]
|
||||||
|
case "Конспекты":
|
||||||
|
list_of_category=["Бумага"]
|
||||||
|
case "Молочные продукты":
|
||||||
|
list_of_category=["Стекло","Тетра Пак", "Иное"]
|
||||||
|
case "Хлебобулочные изделия":
|
||||||
|
list_of_category=["Пластик", "Иное"]
|
||||||
|
case "Моющие средства":
|
||||||
|
list_of_category=["Пластик", "Опасные отходы", "Иное"]
|
||||||
|
case "Одежда":
|
||||||
|
list_of_category=["Одежда"]
|
||||||
|
case "Фрукты и овощи":
|
||||||
|
list_of_category=["Иное"]
|
||||||
|
case "Всякая всячина":
|
||||||
|
list_of_category=["Металл", "Бумага", "Стекло","Иное", "Тетра Пак", "Батарейки", "Крышечки", "Шины", "Опасные отходы", "Лампочки", "Пластик"]
|
||||||
|
|
||||||
|
|
||||||
|
response = requests.post(f"{service.BASE_URL}/nearest_recycling/get", headers=head, data=my_data)
|
||||||
infos = response.json()
|
infos = response.json()
|
||||||
|
|
||||||
trashboxes = []
|
trashboxes = []
|
||||||
@ -246,7 +268,7 @@ async def react_app(req: Request, rest_of_path: str):
|
|||||||
def dispose(data: schemas.DisposeRequest, current_user_schema: Annotated[schemas.User, Depends(utils.get_current_user)],
|
def dispose(data: schemas.DisposeRequest, current_user_schema: Annotated[schemas.User, Depends(utils.get_current_user)],
|
||||||
db: Annotated[Session, Depends(utils.get_db)]):
|
db: Annotated[Session, Depends(utils.get_db)]):
|
||||||
# Находим в бд текущего юзера
|
# Находим в бд текущего юзера
|
||||||
current_user = utils.get_user_by_id(database, current_user_schema.id)
|
current_user = utils.get_user_by_id(db, current_user_schema.id)
|
||||||
# Начисляем баллы пользователю за утилизацию
|
# Начисляем баллы пользователю за утилизацию
|
||||||
current_user.points += 60
|
current_user.points += 60
|
||||||
# В полученном json переходим к данным мусорки
|
# В полученном json переходим к данным мусорки
|
||||||
|
@ -36,7 +36,7 @@ class Announcement(Base): #класс объявления
|
|||||||
src = Column(String, nullable=True) #изображение продукта в объявлении
|
src = Column(String, nullable=True) #изображение продукта в объявлении
|
||||||
metro = Column(String) #ближайщее метро от адреса нахождения продукта
|
metro = Column(String) #ближайщее метро от адреса нахождения продукта
|
||||||
trashId = Column(Integer, nullable=True)
|
trashId = Column(Integer, nullable=True)
|
||||||
booked_by = Column(Integer) #статус бронирования (либо -1, либо айди бронирующего)
|
booked_by = Column(Integer) #количество забронировавших (0 - никто не забронировал)
|
||||||
# state = Column(Enum(State), default=State.published) # состояние объявления (опубликовано, забронировано, устарело)
|
# state = Column(Enum(State), default=State.published) # состояние объявления (опубликовано, забронировано, устарело)
|
||||||
obsolete = Column(Boolean, default=False) # состояние объявления (по-умолчанию считаем его актуальным)
|
obsolete = Column(Boolean, default=False) # состояние объявления (по-умолчанию считаем его актуальным)
|
||||||
|
|
||||||
|
@ -5,6 +5,12 @@ from . import models, schemas, utils
|
|||||||
import random
|
import random
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
# Переменные для получения данных о мусорках с внешнего API
|
||||||
|
# url API
|
||||||
|
BASE_URL='https://geointelect2.gate.petersburg.ru/nearest_recycling/get'#адрес сайта и мой токин
|
||||||
|
# токен для получения данных
|
||||||
|
my_token='eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhU1RaZm42bHpTdURYcUttRkg1SzN5UDFhT0FxUkhTNm9OendMUExaTXhFIn0.eyJleHAiOjE3ODM3ODk4NjgsImlhdCI6MTY4OTA5NTQ2OCwianRpIjoiNDUzNjQzZTgtYTkyMi00NTI4LWIzYmMtYWJiYTNmYjkyNTkxIiwiaXNzIjoiaHR0cHM6Ly9rYy5wZXRlcnNidXJnLnJ1L3JlYWxtcy9lZ3MtYXBpIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJjYjQ2NzljLTU3ZGItNDU5ZC1iNWUxLWRlOGI4Yzg5MTMwMyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLXJlc3QtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6ImM2ZDJiOTZhLWMxNjMtNDAxZS05ZjMzLTI0MmE0NDcxMDY5OCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtZWdzLWFwaSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJzaWQiOiJjNmQyYjk2YS1jMTYzLTQwMWUtOWYzMy0yNDJhNDQ3MTA2OTgiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiLQktC70LDQtNC40LzQuNGAINCv0LrQvtCy0LvQtdCyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiZTBmYzc2OGRhOTA4MjNiODgwZGQzOGVhMDJjMmQ5NTciLCJnaXZlbl9uYW1lIjoi0JLQu9Cw0LTQuNC80LjRgCIsImZhbWlseV9uYW1lIjoi0K_QutC-0LLQu9C10LIifQ.E2bW0B-c6W5Lj63eP_G8eI453NlDMnW05l11TZT0GSsAtGayXGaolHtWrmI90D5Yxz7v9FGkkCmcUZYy1ywAdO9dDt_XrtFEJWFpG-3csavuMjXmqfQQ9SmPwDw-3toO64NuZVv6qVqoUlPPj57sLx4bLtVbB4pdqgyJYcrDHg7sgwz4d1Z3tAeUfSpum9s5ZfELequfpLoZMXn6CaYZhePaoK-CxeU3KPBPTPOVPKZZ19s7QY10VdkxLULknqf9opdvLs4j8NMimtwoIiHNBFlgQz10Cr7bhDKWugfvSRsICouniIiBJo76wrj5T92s-ztf1FShJuqnQcKE_QLd2A'
|
||||||
|
|
||||||
# Загружаем стихи
|
# Загружаем стихи
|
||||||
def add_poems_to_db(db: Session):
|
def add_poems_to_db(db: Session):
|
||||||
f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском
|
f1 = open('text121.txt', encoding='utf-8', mode='r')#открыть фаил для чтения на русском
|
||||||
|
Loading…
x
Reference in New Issue
Block a user