Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Samandar2005/fastapi-chat: Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support. · GitHub
Skip to content

Repository files navigation

FastAPI Real-Time Chat

Bu README loyihani tez tushunishingiz va ishga tushirishingiz uchun barcha muhim ma'lumotlarni o'z ichiga oladi (o'zbek tilida).

Umumiy ma'lumot

FastAPI Real-Time Chat — bu oddiy, lekin to'liq ishlaydigan chat ilovasi. U quyidagilarni o'z ichiga oladi:

  • FastAPI backend (REST + WebSocket)
  • Async SQLAlchemy + SQLite (aiosqlite) baza
  • JWT asosida oddiy autentifikatsiya (/auth/register va /auth/login)
  • WebSocket chat endpoint: /ws/{username}
  • Frontend: oddiy static fayllar (app/static/index.html, script.js, style.css)

Loyihaning maqsadi — real vaqt chat va autentifikatsiya misolini ko'rsatish, shuningdek WebSocket va async DB ishlashini namoyish qilish.

Asosiy xususiyatlar

  • Ro'yxatga olish va kirish (bcrypt bilan parol xeshlash)
  • JWT token bilan autentifikatsiya (frontend tokenni saqlaydi)
  • WebSocket orqali xabarlarni jo'natish va qabul qilish
  • Xabarlarni SQLite bazasiga saqlash

Texnologiyalar

  • Python 3.10+ (yoki 3.11/3.12 mos muhit)
  • FastAPI
  • Uvicorn (ASGI server)
  • SQLAlchemy (async)
  • aiosqlite
  • passlib / bcrypt (parol xeshlash uchun)
  • python-jose (JWT)

Fayl tuzilishi (asosiy)

requirements.txt
app/
main.py
core/
database.py
init_db.py
security.py
manager.py
state.py
models/
__init__.py
message.py
routers/
chat.py
auth.py
static/
index.html
script.js
style.css
scripts/
test_password.py
README.md

Talablar (Prerequisites)

Windows PowerShell misoli:

  • Python (3.10+ tavsiya etiladi)
  • virtualenv yoki venv

Ishga tushirish (Develop / Local)

Quyidagi amallarni PowerShell oynasida bajarish tavsiya etiladi (repo root bilan):

  1. Virtual muhit yaratish va faollashtirish
python -m venv venv
# PowerShell-da:
.\venv\Scripts\Activate.ps1
# Agar cmd.exe ishlatayotgan bo'lsangiz:# .\venv\Scripts\activate
  1. Kerakli paketlarni o'rnatish
pip install -r requirements.txt
  1. Bazani yaratish (birinchi marta yoki schema o'zgarganda)
python -m app.core.init_db

Bu chat.db faylini loyihaning ildizida yaratadi va kerakli jadvalarni qo'shadi.

  1. Serverni ishga tushirish
python -m uvicorn app.main:app --reload
# yoki
uvicorn app.main:app --reload

Keyin brauzerda http://127.0.0.1:8000/ ni oching. Frontend sahifasi app/static/index.html bo'ladi.

API va WebSocket foydalanish

  1. Ro'yxatdan o'tish
  • Endpoint: POST /auth/register
  • Body (JSON):
{
"username": "foydalanuvchi",
"password": "sizning_parolingiz"
}

Parol bcrypt cheklovi sabab 72 baytdan (bytes) uzun bo'lmasligi kerak — frontend va backend bu cheklovni tekshiradi.

  1. Kirish
  • Endpoint: POST /auth/login
  • Body (JSON): xuddi register kabi
  • Javob: access token (JWT)

Frontend tokenni localStorage-ga saqlaydi va WebSocket-ga username orqali ulanadi.

  1. WebSocket
  • Endpoint: ws://localhost:8000/ws/{username}
  • Masalan: ws://localhost:8000/ws/samandar
  • WebSocket orqali yuborilgan xabarlar serverda saqlanadi va barcha hozirgi ulashgan mijozlarga broadcast qilinadi.

Eslatma: hozirgi implementatsiyada WebSocket autentifikatsiyasi token asosida emas — bu keyingi takomillashtirish bo'lishi mumkin (token tekshiruvi, cookie yoki subprotocol orqali yuborish).

Muhit o'zgaruvchilari va xavfsizlik

  • app/core/security.py faylida SECRET_KEY o'rnatilgan. Ishlab chiqarishda bu qiymatni .env faylga yoki muhit o'zgaruvchilariga ko'chiring va loyiha python-dotenv yordamida .env-ni yuklasin.
  • HTTPS/SSL: ishlab chiqarishda HTTPS bilan joylashtiring.
  • CORS: agar frontend boshqa domen/portda bo'lsa, CORS sozlamalarini qo'shing.
  • Parol cheklovi: bcrypt algoritmi 72 bayt limitiga ega — bu bilan hisoblashda e'tiborli bo'ling.

Tez-tez uchraydigan muammolar va ularni hal qilish

  1. ValueError: password cannot be longer than 72 bytes

    • Sabab: bcrypt cheklovi. Yechim: parolni 72 baytdan kichik qilib yuboring yoki serverda inputni qirqing (emas, tavsiya etilmaydi). Loyihada frontend va backendda bu tekshirish qo'yilgan.
  2. passlib / bcrypt versiya xatolari

    • Agar passlib va bcrypt kutubxonalari orasida mos kelmaslik bo'lsa, requirements.txt faylida mos versiyalar ko'rsatilgan. Virtual muhitni yangilang va pip install -r requirements.txt qiling.
  3. Circular import (ImportError: cannot import name 'manager')

    • Buni hal qilish uchun global manager obyekti app/core/state.py da saqlanadi. Agar shu xato chiqsa, fayllarni tahrir qilinganligiga va state.py mavjudligiga ishonch hosil qiling.
  4. WebSocket: Unexpected ASGI message 'websocket.send', after sending 'websocket.close'

    • Buning sababi: websocket holati allaqachon yopilgan yoki xabar yuborishda xato yuz berdi. Loyihada broadcast va connect metodlari tozalandi va xatolar uchun exception handling qo'shildi.
  5. Coroutine was never awaited warning for DB session

    • Buning sababi sync/async session aralash ishlatish. Chat router uchun AsyncSession va async with SessionLocal() ishlatiladi. Agar bu warning ko'rinsa, app/routers/chat.py faylini tekshiring.

Diagnostika va testlar

  • Parol hashing testini ishlatish:
python scripts/test_password.py

Bu oddiy test parolni hash qiladi va 72 bayt chegarasini tekshiradi.

  • DB jadvalini tekshirish (skript):
python scripts/list_tables.py

Bu chat.db dagi jadvallar ro'yxatini chop etadi.

Rivojlantirish va keyingi qadamlar

  • WebSocket autentifikatsiyasini qo'shish (JWT ni WebSocket ulanishiga yuborish va serverda tekshirish)
  • Alembic yordamida migratsiyalar qo'shish (havo o'zgartirishlar uchun)
  • Yagona frontendi va prod deploy (Dockerfile, gunicorn/uvicorn + nginx)
  • Testlarni kengaytirish (pytest — unit va integratsion testlar)

Xulosa va foydalanish bo'yicha tez yo'l-yo'riq

  1. Virtual muhitni yaratish va faollashtirish
  2. pip install -r requirements.txt
  3. python -m app.core.init_db
  4. python -m uvicorn app.main:app --reload
  5. Brauzerda http://127.0.0.1:8000/ oching va chatni sinab ko'ring

Mualliflik va litsenziya

Loyiha MIT litsenziyasi ostida mavjud (ko'proq ma'lumot LICENSE faylida).


Agar README ga qo'shimcha bo'limlar yoki tarjima uslubi bo'yicha o'zgarishlar kerak bo'lsa, ayting — men kerakli o'zgartirishlarni kiritaman.

About

Real-time Chat Application built with FastAPI, WebSockets, and Async SQLAlchemy. Features JWT authentication, message persistence, and sticker support.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages