Получение AttributeError: объект 'ASGIRequest' не имеет атрибута 'get' в daphne django
Я пытаюсь запустить свой fastapi код на веб-сервере daphne вместо uvicorn, потому что моя конечная цель - запустить его на Android, где uvicorn недоступен. На данный момент я отлаживаю свое приложение уже несколько часов. Настроил все. Вот мой код:
settings.py
urlconf.py
from django.urls import path
import views
urlpatterns = [
path('coordinates/', views.main),
]
views.py
from fastapi import FastAPI
from datetime import datetime
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
def main(response):
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.post("/") #get
def root():
return {"message": "Hello World"}
directionX = 0
directionY = 0
Gas = 0
@app.get("/coordinates/") #post is used to get data, but I can send it using get and query parameters response_model=Item)
def getcoordinates(direction_x,direction_y,gas): #http://127.0.0.1:8000/coordinates/?direction_x=0&direction_y=10&gas=50
global directionX,directionY, Gas #changed async def to def
directionX = direction_x
directionY = direction_y
Gas = gas
return {"data":(direction_x,direction_y,gas)}
return HttpResponse(status=200) #works, ok
asgi.py
"""
ASGI config for myproject project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') #myproject.settings
application = get_asgi_application()
Команды терминала для запуска файлов:
daphne -b 0.0.0.0 -p 8000 myproject.asgi:application
Журнал ошибок при посещении http://0.0.0.0:8000/coordinates в браузере:
Большое спасибо всем, кто может помочь мне с этим!
Daphne поддерживается проектом Django, но вы можете установить его самостоятельно. Чтобы установить его, сначала перейдите в виртуальную среду, если вы ее используете, затем выполните:
python -m pip install daphne
Затем удалите код FastAPI из представлений Django в отдельный файл, например, main.py
from fastapi import FastAPI
from datetime import datetime
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.post("/") #get
def root():
return {"message": "Hello World"}
...
Теперь, если вы перейдете в тот же каталог, что и ваш main.py
, вы можете запустить ваш файл с помощью:
daphne -b 0.0.0.0 -p 8000 main:app