首页 > 解决方案 > '在此服务器上未找到请求的资源。' django-rest-framework 和 pythonanywhere 中的错误

问题描述

我有一个简单的 DRF 项目,我想在 Pythonanywhere 上部署它。我做了所有想要的配置,你可以在下面看到照片。

但是当我想点击上传的照片链接(底部照片)

这是我的带有图片链接的 api

我遇到“在此服务器上找不到请求的资源”。错误(下图)

这是错误图片

这是我的 pythonanywhere 媒体配置:

这是我的配置

这是我在 settings.py 中的媒体设置:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/pictures/'

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_pictures')

这是我的 urls.py 代码:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls')),
    path('api/', include('gardesh.urls'))
]

这是我的 models.py 代码:

class Profile(models.Model):
    owner = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.CharField(max_length=150, null=True, blank=False)
    img = models.ImageField(upload_to='user/prof',null=False, blank=False)
    def __str__(self):
    return self.owner.username

class Post(models.Model):
    owner = models.ForeignKey(User,on_delete=models.CASCADE)
    cover = models.ImageField(upload_to='user/cover',null=False, blank=False)
    caption = models.TextField(max_length=250, null=False, blank=False)
    title = models.CharField(max_length=40, null=False, blank=False, default='no')

    def __str__(self):
        return self.title


class Comment(models.Model):
    auther = models.ForeignKey(User, on_delete=models.CASCADE)
    body = models.TextField(max_length=150, null=False, blank=False)
    post = models.ForeignKey(Post, on_delete=models.CASCADE,related_name='comments')
    published_date = models.DateTimeField(null=False, blank=False, auto_now_add=True)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, 
null=True, related_name='replys')

你可以在我的 GitHub 上看到我所有的代码:https ://github.com/GrandNative/Api-gardesh 。谢谢您的帮助

标签: djangodeploymentpythonanywhere

解决方案


在 PythonAnywhre 上,您还需要在 Web 应用程序页面上设置静态文件映射。您需要转到那里的静态文件部分,并在 url 部分(在您的情况下为/pictures/)中输入与 MEDIA_URL 相同的 URL,并将 MEDIA_ROOT 的路径输入到路径部分(完整路径,包括/home/username/...)。如果其余的设置都很好,它应该在重新加载网络应用程序后工作。另请参阅此帮助页面


推荐阅读