views.py
@api_view(['POST'])
@permission_classes([AllowAny])
async def create_table(request):
table_title = request.data.get['table_title']
cols = request.data.get['cols'].split(';')
rows = request.data.get['rows']
async with pool.DB_POOL.acquire() as connection:
create_statment = f'''CREATE TABLE IF NOT EXISTS {table_title}\n'''
for col in cols:
create_statment += f'{col} TEXT NOT NULL,\n'
await connection.execute(create_statment)
return Response(
{'proccess': 'done'},
status=status.HTTP_201_CREATED
)
asgi.py
'''определение промежуточного слоя DBPoolMiddleware для инициализации и закрытия пула подключений в соответствии с состоянием сервера'''
import os
from django.core.asgi import get_asgi_application
import django
from . import pool
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
application = get_asgi_application()
class DBPoolMiddleware:
def __init__(self, app):
self.app = app
async def __call__(self, scope, receive, send):
if scope['type'] == 'lifespan':
while True:
message = await receive()
if message['type'] == 'lifespan.startup':
django.setup()
await pool.create_db_pool()
await send({'type': 'lifespan.startup.complete'})
elif message['type'] == 'lifespan.shutdown':
await pool.shutdown_pool()
await send({'type': 'lifespan.shutdown.complete'})
break
else:
break
else:
await self.app(scope, receive, send)
application = DBPoolMiddleware(application)
settings.py
WSGI_APPLICATION = 'config.wsgi.application'
ASGI_APLICATION = 'config.asgi.aplication'
requirements.txt
asgiref==3.10.0
asyncpg==0.30.0
cffi==2.0.0
click==8.3.0
colorama==0.4.6
cryptography==46.0.3
Django==5.2.8
djangorestframework==3.16.1
h11==0.16.0
jwt==1.4.0
pycparser==2.23
sqlparse==0.5.3
tzdata==2025.2
uvicorn==0.38.0
запускаю сервер командой uvicorn config.asgi:application --host 0.0.0.0 --port 8000, после отправляю запрос постманом
поднимается ошибка AssertionError: Expected a `Response`, `HttpResponse` or `StreamingHttpResponse` to be returned from the view, but received a class coroutine
современные версии джанго же должны поддерживать асинхронные представления без дополнительных декораторов.
ps. знаю про инъекции, но пока просто экспериментирую