2017-06-13 7 views
0

Warum erhalte ich einen Fehler, wenn ich versuche, meinen Server für den Zugriff auf die Datenbank auszuführen, um zu sehen, ob mein Code funktioniert? Während ich in meinem Projekte-Ordner in Terminal lief, lief ich sudo python manage.py runserver, um zu versuchen, den Server auszuführen, aber es funktioniert wegen des oben genannten Fehlers nicht. Ich habe mich in SO umgeschaut, kann aber keinen direkt auf mein Problem bezogen finden.Warum erhalte ich Rekursionsfehler?

Ich bekomme meine if() Aussage ist das Problem.

Der Fehler Ich erhalte sagt:

RuntimeError: maximum recursion depth exceeded while calling a Python object 

Hier ist meine views.py Datei:

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

class IndexView(generic.ListView): 
    template_name = 'music/index.html' 
    context_object_name = 'all_albums' 

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

class DetailView(generic.DeleteView): 
    model = Album 
    template_name = 'music/detail.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 
    success_url = reverse_lazy('music:index') 

class UserFormView(View): 
    form_class = UserForm 
    template_name = 'music/registration_form' 

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

    def post(self): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 
      user = form.save(commit=False) 

      #cleaned normalized data 

      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 

      user.set_password(password) 
      user.save() 

Schwanz Fehler:

File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 255, in check 
    warnings.extend(check_resolver(pattern)) 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/core/checks/urls.py", line 26, in check_resolver 
    return check_method() 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 172, in check 
    warnings = self._check_pattern_startswith_slash() 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 140, in _check_pattern_startswith_slash 
    regex_pattern = self.regex.pattern 

Hier ist meine forms.py Datei:

from django.contrib.auth.models import User 
from django import forms 

class UserForm(forms.ModelForm): # UserForm inherits from forms. 
    passwords = forms.CharField(widget=forms.PasswordInput) 

    class Meta: # Information about your class. 
     model = User # whenevr a creates sign up to your site it's gonna go in same table 
     fields = ['username', 'email', 'password'] 

Hier ist meine urls.py Datei:

from django.conf.urls import include, url 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 

app_name = 'music' 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^music/', include('music.urls')) 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT) 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.MEDIA_ROOT) 
+5

ich weiß, dass eine Rekursion Zurückverfolgungs lang sein können, aber können wir den Schwanz es bitte haben? Alle Zeilen vom Ende aufwärts, die sich nicht wiederholen. –

+0

vielleicht überschreiben Sie UserForm Save-Methode? Kannst du den Code hier eingeben? –

+0

@MartijnPieters gepostet – bojack

Antwort

0

Sie nicht request in Ihre post Methode übergeben hat, sollte es sein,

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


    def post(self, request, *args, **kwargs): 
     # blaah 

Auch verpassten die Erweiterung Ihrer Vorlage.

0

Ich denke, Sie sollten FormView dafür verwenden und müssen nicht Post oder Get-Methode in Ihrer Ansicht überschreiben, da Sie Formularobjekt in Vorlage erhalten, wenn Benutzer form_class in View zuweisen. Sie müssen form_valid() -Methode überschreiben für die benutzerdefinierten Operationen

class UserFormView(FormView): 
    form_class = UserForm 
    template_name = 'music/registration_form' 

    def form_valid(self, form) 
     user = form.save(commit=False) 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user.set_password(password) 
     user.save()