Запуск python сервера - SevenLines/university-map GitHub Wiki

Попробуем теперь запустить с бэкендом, то есть с той часть которая на python, и общается с базой.

Сначала надо скопировать файлик settings_sample.yaml и переименовать его в settings.yaml

Затем открыть блокнотом settings.yaml или в чем там вы файлы текстовые пишите:

Imgur

Внутри settings.yaml будет две строчки.

SQLALCHEMY_DATABASE_URI: mssql+pyodbc://sa:123@.\SQL2008/SPR_POLITEX?driver=SQL+Server+Native+Client+10.0
SECRET_KEY: F8Jh4vCzewG2uU7lMfHCZ4m1fv884oQ7

Первая это строка подключение к базе данных. Собственно ее надо адаптировать под свои настройки. Она имеет формат

mssql+pyodbc://{user}:{password}@{server_instance}/{database_name}?driver={driver_name}

список доступных driver_name можно подсмотреть так

Imgur

Если вы конектетесь с локальным юзером то строка будет выглядеть так

mssql+pyodbc://.\SQL2008/SPR_POLITEX?driver=SQL+Server+Native+Client+10.0

если инстанс по умолчанию, то вот так

mssql+pyodbc://./SPR_POLITEX?driver=SQL+Server+Native+Client+10.0

И так, теперь идем в папку с сервером. Если из git bash консоли, то если вы находитесь в папке client, то можно подняться на уровень выше, если написать

cd ..

Imgur

ну а затем переходим в папку server (кстати для ускорения чтобы не писать все слово server целиком, можно нажать TAB)

cd server

ну либо просто открыть новую баш консоль

Imgur

перво наперво надо установить все пакеты. То есть это уже заранее написанные за нас куски кода, которые упрощают работу с БД, создание серверов и тому подобное.

Все эти пакеты перечислены в файле requirements.txt

Flask==1.0.3  # мини веб сервер, которые умеет слушать запросы из браузера и отвечать на них
PyYaml==5.1 # для работы с yaml файлами
flask-restplus==-0.11.0 # расширение для Flask, для создания api
Flask-SQlAlchemy==2.4 # расширение для Flask, для работы с БД
Flask-WTF==-0.14.2 # расширения для Flask, для более грамотной обработки данных отправленных с сервера
pyodbc==4.0.26 # драйвер для подключения к MSSQL серверу

Для этого находясь в папке server пишем команду:

conda config --add channels conda-forge
conda install --file requirements.txt

Imgur

он спросит вас подтверждение на установку

Imgur

надо написать "y", нажать Enter и дождаться установки

Imgur

почему то один пакет не ставится через конду, так что его приходится ставить через pip

pip install -r requirements.txt

теперь можно попробовать запустить проект. пишем:

python app_server.py

по сути мы просто запускаем на исполнение содержимое файла app_server.py

Imgur

открываем http://localhost:8000/api/auditories/list/ и если строка подключения к БД была правильной, то увидим:

Imgur

url к строке браузера, это на самом деле был запрос к нашему приложению. И мы видим как в консольке появилось строка с усеченым адресом.

Если немного забежать вперед то с точки зрения python сервера, вызвалась функция get внутри класса AuditoriesList:

# file: server.namespaces.auditories.py

api = Namespace("auditories")

@api.route('/list')
class AuditoriesList(Resource):
    def get(self):
        # запросили все аудитории из базы данных упорядоченный по имени
        auditories = Auditory.query.order_by(Auditory.title)
        
        # сформировали ответ в виде словарика
        # {id_аудитории1: {данные об аудитории 1}, id_аудитории2: {данные об аудитории 2}, ...}
        result = {a.id: {
            "id": a.id,
            "title": a.title.strip(),
            "key": Auditory.get_key(a.title),
        } for a in auditories}

        return result