首页 > 解决方案 > 为什么,通过我自己的视图登录后,用户登录到管理站点而不是我的视图?姜戈

问题描述

我有一种情况,我想检查我的应用程序是否适用于生产环境。 当我在本地启动应用程序时,everythink 工作,但在生产中,当我使用我的登录表单时,用户登录 django 管理站点,但在我的用户详细信息视图和另一个视图中,在我使用的模板中我在标签中request.user有错误,因为是。exception.NoReverseMatch{% url '' %}request.userNone

我假设用户没有经过身份验证,但为什么呢?

我的表格:

class LoginForm(LoginForm):
    def clean(self):
        super(LoginForm, self).clean()
        if not self.user.is_active or self.user.is_deleted:
            raise forms.ValidationError(self.error_messages['account_inactive'])
        return self.cleaned_data

我的观点:

class LoginView(LoginView):
    form_class = LoginForm


login_view = LoginView.as_view()

这是我的网址:

app_name = "users"
urlpatterns = [
    path("redirect/", view=user_redirect_view, name="redirect"),
    path("<int:pk>/update/", view=user_update_view, name="update"),
    path("change_password", view=user_password_change_view, name="password_change"),
    path("<int:pk>/remove-user", view=user_remove_from_company_view, name="remove_user"),
    path("<int:pk>/update-role", view=profile_update_role, name="update_role"),
    path("<int:pk>/", view=user_detail_view, name="detail"),
    path("sign_up/", view=registration_view, name="registration"),
]

我的用户模型:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name=_('Email address'),
        max_length=255,
        unique=True,
    )
    first_name = models.CharField(_('First name'), max_length=20)
    last_name = models.CharField(_('Last name'), max_length=20)
    is_active = models.BooleanField(_('Active'), default=True)
    date_joined = models.DateTimeField(_('Date joined'), auto_now_add=True)
    is_deleted = models.BooleanField(_('Deleted'), default=False)
    stripe_customer_id = models.CharField(_('Stripe customer id'), 
max_length=19, blank=True, default='')

    objects = UserManager()

    USERNAME_FIELD = 'email'

    class Meta:
        ordering = ['email']

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def __str__(self):
        return self.email

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.email})

标签: djangopython-3.xdjango-formsdjango-viewsdjango-authentication

解决方案


如果您使用django-allauth不同的本地和生产设置,请尝试在本地设置中设置:

ACCOUNT_EMAIL_VERIFICATION = "none"

编辑

阅读新评论后,我还建议检查模板-也许您在某处引用了错误的对象-即您从对象不存在的相关模型中调用用户?


推荐阅读