django登录后重定向太多

时间:2018-06-11 02:17:52

标签: django python-3.x

我正在运行:Django == 2.0.6 / python == 3.6.5 / django-allauth == 0.36.0

几个星期后我没有碰过这个项目。在开始这一轮开发之前,我升级了许多软件包。

我目前可以创建新的用户帐户并验证用作用户名的电子邮件地址。用户模型是“扩展”的,因为我使用用户名的电子邮件地址,并有一个“个人资料”类来保存其他有趣的字段。

我曾经能够创建一个新帐户,验证电子邮件地址并被带到表单中以填写其他有趣的信息。现在,经过电子邮件验证后,有一个明显的暂停,然后我被告知我已经重定向太多次了。

我的urls.py看起来像:

from django.urls import path, re_path

from .views import index
from .views import profile

urlpatterns = [
    re_path(r'^', index, name='index'),
    path('Profile/<uuid:account_number>/edit', profile.Update.as_view(), name="profile-update"),
    path('Profile/<uuid:account_number>/delete', profile.Delete.as_view(), name="profile-delete"),
    path('Profile/create', profile.Create.as_view(), name="profile-create"),
]

简介CBV是:

import django.contrib.messages as messages
from allauth.account.decorators import verified_email_required
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from django.shortcuts import redirect
from django.shortcuts import render
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, UpdateView, DeleteView

from Members.forms.profile import ProfileForm
from Members.models.profile import Profile

import datetime


@method_decorator(verified_email_required, name='dispatch')
class Create(CreateView):
    model = Profile
    template_name = 'Members/profile.html'
    form_class = ProfileForm
    success_url = 'Members/index.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, {
            'profileForm': self.form_class(),
            'profileState': "create"
        })

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)

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

            my_render = render(request, self.success_url, {
                'profile': profile,
                'profileState': "display"
            })
        else:
            #
            # form has issues. send it back to the create form to fix.
            my_render = render(request, self.template_name, {
                'profileForm': form,
                'profileState': "editForCreate"
            })

        return my_render


@method_decorator(verified_email_required, name='dispatch')
class Update(UpdateView):
    pk_url_kwarg = "account_number"
    model = Profile
    template_name = 'Members/profile.html'
    form_class = ProfileForm
    success_url = 'Members/index.html'

    def get(self, request, *args, **kwargs):
        profile = Profile.objects.get(account_number=self.kwargs[self.pk_url_kwarg])

        form = ProfileForm(instance=profile)

        return render(request, self.template_name, {
            'profileForm': form,
            'profileState': "edit"
        })

    def post(self, request, *args, **kwargs):
        profile = Profile.objects.get(account_number=self.kwargs[self.pk_url_kwarg])

        form = ProfileForm(request.POST, instance=profile)

        if form.is_valid():
            profile = form.save(commit=False)
            profile.user = request.user
            profile.dateModified = datetime.datetime.now()
            profile.save()

            my_render = render(request, 'Members/index.html', {
                'profile': profile
            })
        else:
            #
            # form has issues. send it back to the create form to fix.
            my_render = render(request, self.template_name, {
                'profileForm': form,
                'profileState': "editForUpdate"
            })

        return my_render


@method_decorator(verified_email_required, name='dispatch')
class Delete(DeleteView):
    pk_url_kwarg = "account_number"
    model = Profile
    # form_class = ProfileForm
    success_url = "account/login.html"

    def get(self, request, *args, **kwargs):
        try:
            #
            # I can't believe django does not honor on_delete cascade.
            # Have to roll your own. Tsk
            owner = self.request.user
            profile = get_object_or_404(Profile, account_number=self.kwargs[self.pk_url_kwarg])
            user_pk = profile.user.pk
            profile.delete()

            get_object_or_404(User, pk=user_pk).delete()

            messages.success(request, "The user is deleted")
        except User.DoesNotExist:
            messages.error(request, "User does not exist")
        # except IntegrityError:
        #     messages.error(request, "DB IntegrityError")

        return redirect("accounts/login/")

你如何调试这个?我已经尝试在PyCharm中设置断点但是它们被忽略或者在错误的位置。

1 个答案:

答案 0 :(得分:1)

urls.py 中,您需要添加$才能关闭正则表达式

urlpatterns = [
    re_path(r'^$', index, name='index'),
]