有
我正在使用Django 1.9。我正在用bucky观看newboston Django的课程
现在,当我尝试测试此表单时,它不起作用。当我午餐时代码已经在运行,但是当发送表格时它给了我这个页面。所以,如果有人知道解决方案!
注释:我使用Django的相同版本模仿了他执行的每个代码。那么,这是怎么回事?
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 %}
答案 0 :(得分:0)
HTTP 405错误代码表示不支持所使用的HTTP方法。您的表单是通过HTTP POST提交的,但是所显示视图上的post()
方法未实现,因此它无法处理POST请求。表单提交需要使用post()
方法处理。