错误:405尝试将媒体文件保存/上传到我的cpanel服务器时,不允许使用方法POST

问题描述

尝试将图像或文件保存/上传到位于Cpanel上应用程序根目录中的媒体目录时,我一直收到HTTP错误405。当我检查错误日志时,得到了:

App 8077 output: [ pid=8077,time=2020-09-02 21:24:43,037 ]: Method Not Allowed (POST): /accounts/profile/
App 8077 output: [ pid=8077,038 ]: Method Not Allowed: /accounts/profile/

一切都在本地运行,但我现在不知道为什么会出现错误,因此我将网站托管在Cpanel共享托管上。

在我的settings.py中,我有

# ALLOWED_HOST = ['mysubdomain']
DEBUG = False

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]
STATIC_ROOT ='/path/to/subdomain/staticfiles'

MEDIA_URL='/media/'

MEDIA_ROOT='/path/to/subdomain/media'

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

在我的项目级urls.py

urlpatterns = [
    path('admin/',admin.site.urls),path('accounts/',include('accounts.urls')),]+ static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)

urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

在我的应用级urls.py中

urlpatterns = [
   path('signup/',RegisterView.as_view(),name='signup'),path('profile/',user_views.profile,name='profile'),]

在我的模型中。py

class Profile(models.Model):
    # Columns for Profile Model
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    image = models.ImageField(verbose_name="Image",upload_to=user_directory_path,default='default.jpg')

    def __str__(self):
        #  Return the username on the database "e.g Anderson Dean Profile"
        return "{} {} Profile".format(self.user.first_name,self.user.last_name)

    # Saves a users profile
    def save(self,*args,**kwargs):
        super(Profile,self).save(*args,**kwargs)

        img = Image.open(self.image)

        if img.mode != 'RGB':
            img = img.convert('RGB')

        if img.height > 300 or img.width > 300:
            output_size = (300,300)
            img.thumbnail(output_size,Image.ANTIALIAS)
            fh = storage.open(self.image.name,"w")
            ext = 'jpeg'
            format = 'JPEG' if ext.lower() == 'jpg' else ext.upper()
            img.save(fh,format)
            fh.close()

在我的表格中。py

class ProfileUpdateForm(forms.ModelForm):
            ......................
class UserUpdateForm(forms.ModelForm):
            ......................

在我读到的类似问题上,问题是由于视图中未定义POST方法,但我在view.py中指定了请求方法。

@login_required(login_url=reverse_lazy('login'))
def profile(request):
    # If this is a POST request then process the Form data
    if request.method == 'POST':
        #  Gets the current logged in user's data
        u_form = UserUpdateForm(request.POST,instance=request.user)
        p_form = ProfileUpdateForm(request.POST,request.FILES,instance=request.user.profile)
        # Check if the forms are valid
        if u_form.is_valid and p_form.is_valid():
            # Save the forms
            u_form.save()
            p_form.save()
            sweetify.success(request,title='Account Updated',text='Your account has been updated!',icon='success',button='Ok',timer=3000)
            return redirect('home')
    else:
        # If this is a GET (or any other method) create the default form.
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileUpdateForm(instance=request.user.profile)

    context = {
            'u_form': u_form,'p_form': p_form
    }

    return render(request,'profile.html',context)

在这里GET方法有效,并且我的图像已加载,我可以通过subdomain/media/default.jpg查看该图像。

然后在我的.html

<form class="form" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ u_form|crispy }}
    {{ p_form|crispy }}
<div class="form-group">
<div class="col-xs-12">
   <br>
   <button class="btn btn-success pull-right" style="border-radius: 24px;" type="submit"><i class="glyphicon glyphicon-ok-sign"></i> Save</button>
</div>
 </div>
</form>

单击保存按钮后,我将收到错误消息。 我还尝试在.htaccess文件中强制使用POST GET甚至PUT方法

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
# Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
    RewriteCond %{REQUEST_METHOD} !^(GET|POST|PUT) [NC]
    RewriteRule .* - [F,L]
</IfModule>

我真的不知道问题出在哪里,这里有什么我想念的吗?任何帮助表示赞赏 谢谢。

仍然没有找到解决方案。它在本地运行127.0.0.1在Heroku上托管时可以工作,但是在cpanel上托管时,以某种方式上传文件时,一旦视图带有视图,它会为另一个与文件上传有关的URL给出错误405或错误404。也。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)