我在Apache 2.4上托管的基本Django应用程序中集成了基本的DRF API。
在Apache配置中,我向本地服务器上的任何人提供对应用程序的授权/访问权限,并带有附加的基本身份验证设置(用于测试),以允许来自外部服务器的API调用与某些模型进行交互。
当我使用基本身份验证凭据向应用程序本身发出GET请求时,收到包含内容的200响应(如果我不包括凭据,则被拒绝)。但是,当我向DRF API端点发出GET请求时,会收到401未经授权的响应。 401提示响应未通过身份验证。
我的问题是-为何面向DRF的API调用(或如何)会在与django应用程序本身的调用不同的位置(如果确实如此)寻找身份验证凭据?
Apache配置如下:
DocumentRoot /var/www/html
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIDaemonProcess portal python-home=/home/bio_admin/envs/dj python-path=/var/www/portal/html/bpp
WSGIScriptAlias /portal /var/www/portal/html/bpp/bioworks/wsgi.py process-group=portal
WSGIProcessGroup portal
WSGIPassAuthorization On
Alias /static/ /var/www/portal/html/bpp/static/
<Directory /var/www/portal/html>
AuthType Basic
AuthName "portal"
AuthUserFile "/var/www/portal/html/.htpasswd"
Require user bio_admin
Require ip 74.xxx.xxx.x
</Directory>
settings.py
文件的DRF部分如下所示:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES' : (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
)
}
urls.py
(用于api端点)以及返回具有正确auth的200的端点:
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
path('projects/', views.ProjectsListView.as_view(), name='projects'),
path('api/projects/', views.projectListAPI.as_view())
]
urlpatterns = format_suffix_patterns(urlpatterns)
views.py
所涉及的api类:
class projectDetailAPI(generics.RetrieveUpdateDestroyAPIView):
queryset = Project.objects.all()
serializer_class = ProjectSerializer