Django неправильно URL-маршрутизации в производстве, но правильно в разработке
Наш веб-сайт развернут с помощью Django + Daphne + Nginx.
При локальном тестировании URL-маршрутизация является правильной, но в производственном режиме URL-маршрутизация является неправильной. Например, первая страница после открытия сайта - это домашняя страница. Домашняя страница функции написана в /appname/views.py. И URL-адрес должен быть / чаты. А при локальном тестировании я перенаправляюсь на 127.0.0.1/chats. Но в производственном режиме я перенаправлен на страницу mywebsite.com/appname.views.homepage и, конечно, в браузере отображается "запрошенный ресурс не найден на сервере". В функции предложение, используемое для перенаправления страницы, является перенаправлением ("appname.views.homepage"). По неправильному перенаправленному URL я думаю, что запрос успешно передан правильной функции, но часть перенаправления завершается неудачно.
Я считаю, что логика в views.py должна быть правильной, потому что маршрутизация URL при локальном тестировании является правильной. Кто-нибудь знает, что здесь может происходить?
Если нужна какая-либо другая информация, пожалуйста, дайте мне знать!
Используемые пакеты: Django 1.11.20 Daphne 1.3.0 Каналы 1.1.8 asgi-redis 1.4.3 asgiref 1.1.2
Конфигурация Nginx
server {
listen 80;
server_name mywebsite.com;
charset utf-8;
client_max_body_size 20M;
location /static/ {
alias /path/to/my/site/static/;
}
location / {
proxy_pass http://0.0.0.0:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
/appname/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.homepage, name='homepage'),
]
/mainfolder/urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
urlpatterns = [
url(r'^', include('appname.urls')),
url(r'^chats/', include('appname.urls')),
]
фрагменты кода, связанные с домашней страницей функции в /appname/views.py
def home_page(request):
if not request.user.is_authenticated():
workerid = request.GET.get('workerId')
hitid = request.GET.get('hitId')
user, new = User.objects.get_or_create(username=workerid,first_name=hitid)
user.set_password("mypass")
user.save()
user = authenticate(username=workerid,password="mypass")
if user:
login(request,user)
return redirect("experiment.views.home_page")
else:
return render(request,'waiting_room/error.html',{"message":"could not authenticate"})
if new:
messages.warning(request,"Fill in Nickname")
return render(request,'experiment/nickname.html')
return render(request,'experiment/error.html',{"message":"problem in not authenticated"})
myuser = request.user
try:
u = ExpUser.objects.get(user=myuser)
if u.expstage in ["nickname"]:
return redirect("experiment.views."+u.expstage)
else:
return render(request,'experiment/nickname.html')
except Expuser.DoesNotExist:
messages.warning(request,"Fill in Nickname")
return render(request,'experiment/nickname.html')
return render(request,'experiment/error.html',{"message":"problem in authenticated"})
def nickname(request):
if request.user.is_authenticated():
if request.method == "POST":
nickname = request.POST.get('nickname')
myuser = request.user
s = randint(1,1000000)
userexp = ExpUser.objects.create(user=myuser,nickname=nickname,expstage="wait_room",secret_code = s)
consent_user = Consent_form.objects.create(user=myuser,agree='signed')
return redirect('experiment.views.before_task')
return render(request,'experiment/nickname.html')
else:
return redirect('experiment.views.home_page')