Создание полноценного приложения React + FastAPI: связывание бэкенда и фронтенда с помощью Python и JavaScript

Posted by


Для того чтобы связать бэкенд и фронтенд в React + FastAPI Full Stack приложении, вам понадобится использовать Python для бэкенда с FastAPI и JavaScript для фронтенда с React. В этом детальном уроке мы покажем вам, как создать и связать бэкенд и фронтенд для вашего приложения.

Шаг 1: Установка необходимых инструментов и зависимостей

Начнем с установки FastAPI для создания бэкенд части приложения. Для этого выполните следующие команды:

pip install fastapi
pip install uvicorn

Затем создайте основной файл для вашего бэкенда, например main.py. В этом файле вы можете определить роуты для вашего API с помощью FastAPI.

Для установки React и создания фронтенд части приложения выполните следующие команды:

npx create-react-app frontend
cd frontend

Шаг 2: Создание API на бэкенде с FastAPI

В вашем файле main.py определите API для вашего приложения с помощью FastAPI. Ниже приведен пример кода для создания простого API с одним ендпоинтом:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

Запустите ваш бэкенд сервер с помощью следующей команды:

uvicorn main:app --reload

Шаг 3: Создание интерфейса React

Откройте свой текстовый редактор и отредактируйте компонент App.js в вашем фронтенд проекте. Ниже приведен пример кода для создания простого компонента, который делает GET запрос к вашему бэкенд API:

import React, { useState, useEffect } from 'react';

function App() {
  const [data, setData] = useState({});

  useEffect(() => {
    fetch('http://localhost:8000')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
    <div>
      <h1>{data.Hello}</h1>
    </div>
  );
}

export default App;

Шаг 4: Связывание бэкенда и фронтенда

Для того чтобы связать ваш бэкенд и фронтенд, вам необходимо указать URL вашего бэкенд API в вашем фронтенд компоненте. В приведенном выше примере мы использовали http://localhost:8000 как URL для получения данных с нашего бэкенда.

Вы можете дальше расширить ваше приложение, добавив новые роуты на бэкенде и компоненты на фронтенде. Для этого обновите файлы main.py на бэкенде и компоненты React в вашем фронтенд проекте.

Шаг 5: Запуск приложения

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

# В одном окне терминала запустите ваш бэкенд сервер
uvicorn main:app --reload

# Во втором окне терминала запустите ваш фронтенд сервер
cd frontend
npm start

После выполнения этих шагов, вы сможете увидеть ваше React + FastAPI Full Stack приложение в браузере по адресу http://localhost:3000. Ваш фронтенд будет получать данные с вашего бэкенда и отображать их на странице.

Таким образом, вы успешно связали бэкенд и фронтенд в вашем React + FastAPI Full Stack приложении. Надеемся, что этот урок был полезен для вас и помог вам освоить процесс создания и связывания бэкенда и фронтенда для вашего приложения.

0 0 votes
Article Rating
37 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@artemshumeiko
2 months ago

💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: https://clck.ru/3B5gwP 💡

Забирай роадмап изучения самого востребованного фреймворка на Python – FastAPI здесь: https://t.me/ArtemShumeikoBot

@user-tf7mv8iv8c
2 months ago

какого же хрена фронтенд настолько сложнее бэка 😅все говорят вот фронтен – легкий вход. НЕТ! Делать ручки на фастапи – вот настоящий легкий вход! 🤣Спасибо за видео, очень приятная подача и получить что-то рабочее за 1 час это очень круто!

@AntonYatsenkoRU
2 months ago

Никогда до меня не дойдет этот бред: писать css свойства через длинные цепочки классов..
Что в таком случае вы оптимизируете, какой процесс конкретно? Кол-во строчек кода? НЕТ (ведь вы просто переносите свойства css в названия классов).. Кол-во файлов? НЕТ (если учитывать различные файлы конфигов и костыли для решения конфликтов между разными библиотеками)… Какой-то бред

@user-qd8xb8gq3e
2 months ago

А мне одному не нравится что в HTTPClient указан header для конкретной реализации CMC? 🙂
Надо в CMCHTTMClient объявить init и на вход дать headers 🙂

@Edvardmoskovka
2 months ago

А на какой минуте тут настройка аутентификации и регистрации?

@user-or9hd4nj9z
2 months ago

Выбираю Select a framework: » React вариант JavaScript, а мне вот такую простынь
Error: EPERM: operation not permitted, unlink 'C:UsersAcerDesktopОбучениеTrek_CriptovenvScriptspython.exe'

at unlinkSync (node:fs:1874:11)

at _unlinkSync (node:internal/fs/rimraf:214:14)

at fixWinEPERMSync (node:internal/fs/rimraf:306:5)

at rimrafSync (node:internal/fs/rimraf:200:14)

at node:internal/fs/rimraf:253:9

at Array.forEach (<anonymous>)

at _rmdirSync (node:internal/fs/rimraf:250:7)

at fixWinEPERMSync (node:internal/fs/rimraf:304:5)

at rimrafSync (node:internal/fs/rimraf:200:14)

at node:internal/fs/rimraf:253:9 {

errno: -4048,

code: 'EPERM',

syscall: 'unlink',

path: 'C:\Users\Acer\Desktop\Обучение\Trek_Cripto\venv\Scripts\python.exe'

}

PS C:UsersAcerDesktopОбучениеTrek_Cripto>

@user-or9hd4nj9z
2 months ago

Нашел ошибку неправильно перепечатал к себе код.В фаиле main в 21 строчке вместо currency_id: int Я написал currency_id: id.
Это мое предположение что там была ошибка!
Но после исправления код заработал!

@user-or9hd4nj9z
2 months ago

Добрый день! Это опять Я! Не знаю Я написал в телегу, но Я думаю здесь Я быстрей получу ответ чем в телеге, хотя в телеге можно легко вставлять фото!

@user-jf2ui2qy1y
2 months ago

Виталий, спасибо за видео!!!

@brazenoptimist
2 months ago

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

@user-or9hd4nj9z
2 months ago

Привет, Артем!
У меня следующая напасть.Плюнуло мне ошибку "Error loading ASGI app. Import string "src.main.app" must be in format "<module>:<attribute>"."Что за строка какой формат!

@user-or9hd4nj9z
2 months ago

А у меня как всегда дало ошибку после команды uvicorn src.mian:app –reload
Простынь ошибки:
PS C:UsersAcerDesktopОбучениеbackend> uvicorn src.mian:app –reload
INFO: Will watch for changes in these directories: ['C:\Users\Acer\Desktop\Обучение\backend']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [17964] using WatchFiles
Process SpawnProcess-1:
Traceback (most recent call last):
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libmultiprocessingprocess.py", line 314, in _bootstrap
self.run()
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libmultiprocessingprocess.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicorn_subprocess.py", line 80, in subprocess_started
target(sockets=sockets)
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornserver.py", line 65, in run
return asyncio.run(self.serve(sockets=sockets))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libasynciorunners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libasynciorunners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libasynciobase_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornserver.py", line 69, in serve
await self._serve(sockets)
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornserver.py", line 76, in _serve
config.load()
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornconfig.py", line 434, in load
self.loaded_app = import_from_string(self.app)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornimporter.py", line 22, in import_from_string
raise exc from None
File "C:UsersAcerDesktopОбучениеbackendvenvLibsite-packagesuvicornimporter.py", line 19, in import_from_string
module = importlib.import_module(module_str)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:UsersAcer.pyenvpyenv-winversions3.12.4Libimportlib__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'src'
INFO: Stopping reloader process [17964]
Я слаб в языке!

@ardorosh9649
2 months ago

Объясните почему не использовать jinja и на фронтенде уже дополнять JS логикой.
Неоднократно слышу что сайты на React не особо любит Google который не всегда читает JS хоть и заявлял о этом .
И вообще если на бекенде Fastapi а на фронтенде должен быть удобный и быстрый что выбрать React или Vue? Не нужно перед ними делать Next.JS?

@user-hz9vg1vq4r
2 months ago

Есть один прикол, что если обновить страницу после того как мы уже написали динамичные данные, то будет ошибка, так как при первичной загрузке страницы мы не загружаем данные о валюте, поэтому нужно сделать первоначальныую загрузку данных о битке без нажатия на кнопку

@dikiykoban2150
2 months ago

Сделай пожалуйста приложение где есть несколько страниц и на каждой странице своя тематика, например: 1 – погода, трейдинг, новости, 2- списки задач, работа с документами, 3 голосовой помощник (Vosk) и управление компом (через кнопки)

@samuray8128
2 months ago

Давай еще деплой, как вторая часть

@agagag6187
2 months ago

54:00 у меня ошибка,currency не видит как будто, красным подсвечивается,как пофиксить?

@Demimur186
2 months ago

Подскажите сайт где я могу разместить задание для бекенд разработчиков

@denisperevoshchikov8920
2 months ago

На 17:17мин выдает ошибку 500, `ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate`. Как поправить?

@thelokrit9741
2 months ago

а такой вопросик, вот например для установки библиотек в питоне -> все ставится в папку venv, а как обстоят дела у js, куда например ставятся файлы при установке tailwindcss, или же все зависимости в файле tailwind.config.js?