首页 > 解决方案 > django - urlpatterns 为定义的 URL 提供 404 错误

问题描述

我有一个在 django 上运行的应用程序。但是,即使已定义某些 url,我也会收到错误代码 404。

from .views import check_secret_key                 # a function in views.py
from .swagger_schema import SwaggerSchemaView       # a class inheriting APIView
from .kom.kom_writer import kom_status              # a function
from django.conf.urls import url


urlpatterns = [
    url(r'^docs/api-docs/', SwaggerSchemaView.as_view()),
    url(r'^nag/secret-key/', check_secret_key),
    url(r'^nag/kom-status/', kom_status),
]

APIcurl http://localhost:9999/internal/docs/api-docs/工作正常,但curl http://localhost:9999/internal/nag/kom-status/出现nag/secret-key404 错误。

未找到

在此服务器上找不到请求的资源。

我不确定我错过了什么。

注意:应用程序最近从 DJango 1.8 更新到 1.11 和 djangorestframework 3.2.5 到 3.5.3。在此之前它工作正常。

出于调试目的,我现在只是返回成功响应。

from django.http import HttpResponse

def check_secret_key(request):
    r = HttpResponse("I am good", content_type='text/plain', status=200)
    return r

标签: pythondjangodjango-rest-framework

解决方案


我发现了这个问题。应用程序正在使用两个 wsgi.py 来运行 django 应用程序。

两个wsgi.py文件都在使用

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "it.settings.prod")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nt.settings.prod")

将其更改为

os.environ["DJANGO_SETTINGS_MODULE"] = "it.settings.prod"
os.environ["DJANGO_SETTINGS_MODULE"] = "nt.settings.prod"

解决了这个问题。

参考https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/modwsgi/


推荐阅读