Skip to content
Open
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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
venv/
__pycache__/
*.pyc
.env
13 changes: 13 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM python:3.11-slim

WORKDIR /app

COPY backend/ ./backend

COPY frontend/ ./frontend

RUN pip install --no-cache-dir fastapi uvicorn requests

EXPOSE 8000

CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
92 changes: 31 additions & 61 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,61 +1,31 @@
# Безопасность веб-приложений. Лабораторка №2

## Схема сдачи

1. Получить задание
2. Сделать форк данного репозитория
3. Выполнить задание согласно полученному варианту
4. Сделать PR (pull request) в данный репозиторий
6. Исправить замечания после code review
7. Получить approve
8. Прийти на занятие и защитить работу

Что нужно проявить в работе:
- умение разработать завершенное целое веб-приложение, с клиентской и серверной частями (допустимы открытые АПИ)
- навыки верстки на html в объеме 200-300 тегов
- навыки применения css для лейаута и стилизации, желательно с адаптацией к мобилке
- использование jQuery или аналогичных JS-фреймворков
- динамическая подгрузка контента
- динамическое изменение DOM и CSSOM

Если у вас своя идея по заданию, то расскажите, обсудим и подкорректирую.

## Вариант 1. Расписания

Сделать аналог раздела https://ssau.ru/rasp?groupId=531030143

Какие нужны возможности:
- справочники групп, табличные данные по расписаниям добывать с настоящего сайта на серверной стороне приложения
- в клиентскую часть подгружать эти сведения динамически по JSON-API
- обеспечить возможность смотреть расписания в разрезе группы или препода
- обеспечить возможность выбора учебной недели (по умолчанию выбирается автоматически)

## Вариант 2. Аналог Прибывалки для электричек

Сделать веб-версию Прибывалки, только для электричек

Какие нужны возможности:
- находить желаемую ЖД-станцию поиском по названию или по карте
- отображать расписания всех проходящих поездов через выбранную станцию
- отображать расписания для поездов между двумя станциями
- работа через АПИ Яндекс.Расписаний https://yandex.ru/dev/rasp/doc/ru/ (доступ получите сами)
- хорошая работа в условиях экрана смартфона
- бонус: функция "любимых остановок"

## Вариант 3. Прогноз погоды

Сделать одностраничный сайт с картой, на которой можно выбрать населенный пункт и получить прогноз погоды на несколько дней по нему.

Какие нужны возможности:
- увидеть на карте точки с населенными пунктами. Координаты населенных пунктов взять из https://tochno.st/datasets/allsettlements - но все 150 тысяч не нужно, выберите 1 тысячу с самым большим населением.
- при нажатии на точку получить всплывающее окошко с графиками изменения температуры, осадков, силы ветра. API для прогнозов возьмите с https://projecteol.ru/ru/ с соблюдением правил.
- графики рисовать каким-нибудь приличным компонентом, например, https://www.chartjs.org/
- находить населенный пункт по названию
- можете реализовать с собственным серверным компонентом или придумать, как обойтись без него







# Weather-Map App
Реализация веб-приложения для интерактивного просмотра прогноза погоды по карте.
## Быстрый запуск
```bash
git clone https://github.com/klon-22800/websec-2.git
cd websec-2
docker build -t weather-app:latest .
docker run -d -p 8000:8000 weather-app:latest
```
## Стэк
- Карта - **Leaflet js**
- Погода - **OpenMeteo API**
- Фронт - **HTML/CSS/JS**
- Бэк - **FastAPI**

## Пример для разных устройств

<p><strong>Ноутбук Планшет и Смартфон</strong></p>
<table>
<tr>
<td style="text-align:center;">
<img src="https://github.com/klon-22800/websec-2/blob/main/readme_images/notebook.png" width="400">
</td>
<td style="text-align:center;">
<img src="https://github.com/klon-22800/websec-2/blob/main/readme_images/notepad.png" width="400">
</td>
<td style="text-align:center;">
<img src="https://github.com/klon-22800/websec-2/blob/main/readme_images/smartphone.png" width="300">
</td>
</tr>
</table>
Empty file added backend/__init__.py
Empty file.
24 changes: 24 additions & 0 deletions backend/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles

from backend.settlements import router as settlements_router
from backend.weather import router as weather_router

app = FastAPI()

app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)

app.include_router(settlements_router)
app.include_router(weather_router)
app.mount("/", StaticFiles(directory="frontend", html=True), name="frontend")

@app.get("/")
def root():
return {"status": "ok"}
Loading