如何以Django格式修复HTTP错误405?

时间:2019-12-26 08:57:11

标签: django

有 我正在使用Django 1.9。我正在用bucky观看newboston Django的课程
现在,当我尝试测试此表单时,它不起作用。当我午餐时代码已经在运行,但是当发送表格时它给了我这个页面。所以,如果有人知道解决方案!
注释:我使用Django的相同版本模仿了他执行的每个代码。那么,这是怎么回事?

enter image description here

views.py

from django.views import generic
from django.views.generic import View
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django.core.urlresolvers import reverse
from .models import Album, Song
from .forms import UserForm


class HomeView(generic.ListView):
    template_name = 'music/index.html'

    def get_queryset(self):
        return Album.objects.all()


class DetailView(generic.DetailView):
    model = Album
    template_name = 'music/details.html'


class AlbumCreate(CreateView):
    model = Album
    fields = ['artist', 'album_title', 'genre', 'album_logo']


class AlbumUpdate(UpdateView):
    model = Album
    fields = ['artist', 'album_title', 'genre', 'album_logo']


class AlbumDelete(DeleteView):
    model = Album
    # where are you going when you delete this element from page
    success_url = reverse_lazy('music:home')


class SongView(generic.ListView):
    template_name = 'music/song.html'

    def get_queryset(self):
        return Song.objects.all()


class CreateSong(CreateView):
    model = Song # will affects on this model
    fields = ['album', 'file_type', 'song_title'] # model fields

    # You have used get_absolute_url in models.py so you cannot using it again until no errors wrong
    def get_success_url(self):
        return reverse('music:songs')
    # So the question is: where are the fields that will return these fields?
    # answer is: you will create Html file which called song_form and that contains all fields you hold


class UserFormView(View):
    form_class = UserForm
    template_name = 'music/registration.html'


    def get(self, request):
        # Empty value
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})


    def set(self, request):
        form = self.form_class(request.POST)

        if form.is_valid():
            # If form is True catch the form that came by POST without saving it
            user = form.save(commit=False)
            # cleaned_data allow to check if any field has errors or it's Normalized data
            # check data automatically by Django
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            # make the password field not visual
            user.set_password(password)
            user.save()
            # If the given credentials are valid, return a User object
            user = authenticate(username=username, password=password)

            # Check if user has logged in or not
            if user is not None: # -> so, it was post
                if user.is_active:
                    login(request, user)
                    return redirect('music:home')
        return render(request, self.template_name, {'form': form})

urls.py

from django.conf.urls import url

from . import views

app_name = 'music'

urlpatterns = [
    # /music/
    url(r"^$", views.HomeView.as_view(), name='home'),
    # /music/register/
    url(r"^register/$", views.UserFormView.as_view(), name='register'),
    # /music/123/
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='details'),
    # /album/add/
    url(r'^album/add/$', views.AlbumCreate.as_view(), name='add-album'),
    # /album/123/
    url(r'^album/(?P<pk>[0-9]+)/$', views.AlbumUpdate.as_view(), name='update-album'),
    # /album/123/delete/
    url(r'^album/(?P<pk>[0-9]+)/delete/$', views.AlbumDelete.as_view(), name='delete-album'),
    # /music/song/
    url(r'^song/$', views.SongView.as_view(), name='songs'),
    # /music/song/
    url(r'^song/add/$', views.CreateSong.as_view(), name='add-song'),
]

registration.html

{% extends 'music/base.html' %}
{% block body %}

    <div class="album-form">
        <div class="container-fluid">
            <div class="row">
                <div class="col-sm-12 col-md-7">
                    <div class="panel panel-default">
                        <div class="panel-body">
                            <h2>Create a new account</h2>
                            <form class="form-horizontal" action="" method="post" enctype="multipart/form-data">
                                {% csrf_token %}
                                {% include 'music/form-template.html' %}
                                <div class="form-group">
                                    <div class="col-sm-offset-2 col-sm-10">
                                        <button type="submit" class="btn btn-success">Submit</button>
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

{% endblock %}

1 个答案:

答案 0 :(得分:0)

HTTP 405错误代码表示不支持所使用的HTTP方法。您的表单是通过HTTP POST提交的,但是所显示视图上的post()方法未实现,因此它无法处理POST请求。表单提交需要使用post()方法处理。