【问题标题】:Why am I getting recursion error?为什么会出现递归错误?
【发布时间】:2017-06-13 17:24:46
【问题描述】:

为什么在尝试运行我的服务器以访问数据库以查看我的代码是否有效时出现错误?在Terminal 的项目文件夹中,我运行sudo python manage.py runserver 以尝试运行服务器,但由于上述错误而无法正常工作。我环顾四周,但找不到与我的问题直接相关的问题。

我的if() 声明是问题所在。

我得到的错误是:

RuntimeError: maximum recursion depth exceeded while calling a Python object

这是我的views.py 文件:

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()

错误的尾巴:

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

这是我的forms.py 文件:

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']

这是我的urls.py 文件:

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)

【问题讨论】:

  • 我知道递归回溯可能很长,但是我们可以请它的尾巴吗?从末端向上的所有行不重复。
  • 也许你覆盖了用户窗体的保存方法?你能把代码放在这里吗?
  • @MartijnPieters 发布
  • 你也可以发布你的 urls.py 吗?
  • 您错过了模板名称中的 .html

标签: python sql django


【解决方案1】:

您没有将request 传递到您的post 方法中,应该是,

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


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

另外,错过了模板的扩展名。

【讨论】:

    【解决方案2】:

    我认为您应该为此使用 FormView,并且不需要在您的视图中覆盖 post 或 get 方法,因为如果用户在视图中分配 form_class,您将在模板中获取表单对象。您必须覆盖 form_valid() 方法你的自定义操作

    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()
    

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多