标签: django-authentication

子模型中的 Django 用户模型

在我当前的项目中,我正在替换默认的 django 用户模型。随着模型数量开始增长,我决定将实现分成几个文件夹,但现在 django 找不到我的用户模型。

我有这个,它有效:

djutils
    models.py
        UserManager
        User
Run Code Online (Sandbox Code Playgroud)

我改成了这个,它不再工作了

djutils
    models
        __init__.py
            from djutils.models.user import UserManager, User
        user.py
            UserManager
            User
Run Code Online (Sandbox Code Playgroud)

它不应该仍然导入模型吗?我得到:

CommandError: One or more models did not validate:
auth.user: Model has been swapped out for 'djutils.User' which has not been installed or is abstract.
Run Code Online (Sandbox Code Playgroud)

我的 settings.py 中有这个

AUTH_USER_MODEL = 'djutils.User'
Run Code Online (Sandbox Code Playgroud)

(注意第一种情况有效)

请指教!问候

编辑

djutils
    models
        __init__.py
            from __future__ import absolute_import

            from djutils.models.base import Manager, PrivateModel, Model
            from djutils.models.user import UserManager, User
            from djutils.models.passwordrecovery import PasswordRecoveryManager, PasswordRecovery

        user.py …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-authentication python-3.x

1
推荐指数
1
解决办法
1545
查看次数

Django使用"登录"两次.导入时如何解决冲突?

from django.contrib.auth import authenticate, login
from django.contrib.auth.views import login
Run Code Online (Sandbox Code Playgroud)

如果我同时要求"登录",那么理想的做法是什么?谢谢!

python django django-views django-authentication python-2.7

1
推荐指数
1
解决办法
89
查看次数

是否可以在 Django 中创建我自己的 createsuperuser 命令?

我正在开发一个应用程序,在该应用程序中我制作了我的自定义'User'模型,该模型将电子邮件作为用户名,并且它依赖于另一个名为'Company'. 运行命令时,'python manage.py createsuperuser'我需要 django 首先询问我公司并创建公司实例,而不是询问其中'company'是外键的用户模型字段,然后用户提供可能'1'是用户在制作公司对象时已经创建的公司 ID 。

我试图通过在我的应用程序中创建管理文件夹来实现上述功能,但它似乎不起作用。

任何人都可以告诉我正确的方法来做到这一点。

提前致谢。

django django-admin django-authentication

1
推荐指数
1
解决办法
6880
查看次数

NoReverseMatch at /user/password_reset/ Reverse for 'password_reset_done' 未找到

我正在尝试使用 Django 身份验证系统,但出现错误: 在此处输入图像描述

“用户”是应用程序名称。

项目的 urls.py:

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


urlpatterns = [
     url(r'^admin/', admin.site.urls),
     ...
     url(r'^user/', include('user.urls', namespace='user')),
     ...
]
Run Code Online (Sandbox Code Playgroud)

用户/urls.py:

from django.conf.urls import url, include

from . import views


urlpatterns = [
    url(r'^register/$', views.register, name='register'),
    url(r'^settings/$', views.settings, name='settings'),
    url(r'^settings/password/$', views.password, name='password'),
    url(r'^settings/accounts/$', views.configure_accounts,
        name='configure_accounts'),
    url(r'^settings/accounts/error/$', views.configure_accounts_error,
        name='configure_accounts_error'),
    url('^', include('django.contrib.auth.urls')),
]
Run Code Online (Sandbox Code Playgroud)

我可以访问/user/login/、/user/logout/。当我转到 /user/password_reset/ 时,我可以输入电子邮件,然后按“提交”按钮后,出现错误(如图所示):

NoReverseMatch at /user/password_reset/
Reverse for 'password_reset_done' not found. 'password_reset_done' is not …
Run Code Online (Sandbox Code Playgroud)

python django django-authentication

1
推荐指数
1
解决办法
2378
查看次数

如何结合 Django 的“LoginRequiredMixin”和表单工具的“FormPreview”?

LoginRequiredMixin在其他基于类的视图上效果很好。表单工具也FormPreview运行良好。但是当我尝试同时使用两者时,它们LoginRequiredMixin就会被忽略。

如果我使用表单工具Django 文档中最基本的示例,情况也是如此。

我发现两件事很奇怪(但这不一定是原因):

  • “这个 mixin 应该位于继承列表的最左边。” 这听起来像是有一些内部黑客行为,如果有人做了一些不规则的事情,就会崩溃。没有解释为什么。
  • 表单工具视图应该被称为它本身,而不是方法.as_view(),这又不符合标准。

这是一个错误吗?我能做些什么?

python django django-forms django-authentication

1
推荐指数
1
解决办法
300
查看次数

WrappedAttributeError 'IsAdminUser' 对象没有属性 'authenticate'

我正在使用 Django Rest Frameworkpermission_classes来创建 API。我的理解是,一旦我使用未经身份验证的用户访问该 API,我应该被重定向到登录表单,对吗?相反,我收到以下错误:

WrappedAttributeError at /sessions/api/listPatients/ 'IsAdminUser' object has no attribute 'authenticate'

没有重定向到登录表单......我不明白为什么。

为什么会这样?我究竟做错了什么?如何解决?

这是urls.py

path('api/getSessions/',
     views.GetSessions.as_view(),
     name="GetSessionsAPI"),
Run Code Online (Sandbox Code Playgroud)

这是我试图去的观点:

class GetSessions(generics.ListCreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = SessionSerializer

    def get_queryset(self):
        if self.request.user.is_authenticated:
            return Session.objects.filter(
                patient__created_by_user=self.request.user)
        else:
            raise PermissionDenied
Run Code Online (Sandbox Code Playgroud)

这是另一个引发错误的:

class ListPatients(generics.ListAPIView):

    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = PatientsSerializer

    def get_queryset(self):
        if self.request.user.is_authenticated:
            try:
                return Patient.objects.filter(
                    created_by_user=self.request.user).\
                   filter(curently_active=True)
            except Patient.DoesNotExist:
                raise PermissionDenied
    else:
        raise PermissionDenied
Run Code Online (Sandbox Code Playgroud)

这是完整的追溯:

WrappedAttributeError at /sessions/api/listPatients/
'IsAdminUser' object has no attribute 'authenticate'
Request …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-rest-framework

1
推荐指数
1
解决办法
3611
查看次数

自定义电子邮件身份验证后端在 django 2.1.4 中不起作用

我在将自定义身份验证后端集成到django 2.1.4. 以下是我的代码:
我的FMS.authBackend模块:

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

class authEmailBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        print("aaaaaaa")
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(email=username)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.check_password(password):
                return user
        return None
Run Code Online (Sandbox Code Playgroud)

我的settings.py

AUTHENTICATION_BACKENDS = (
                'FMS.authBackend.authEmailBackend',
                'django.contrib.auth.backends.ModelBackend',

                )
Run Code Online (Sandbox Code Playgroud)

我的urls.py

from django.contrib.auth import views as auth_views
urlpatterns = [ 
        path('login', my_decos.logout_required(auth_views.LoginView.as_view(template_name = 'register/login.html')),name = 'login')
]
Run Code Online (Sandbox Code Playgroud)

上面的代码在我的情况下不起作用。函数authenticateinauthEmailBackend永远不会被调用为控制台中没有打印任何内容,但我在authenticate函数中打印语句。

尽管相同的代码适用于django 2.0.8 …

python django django-authentication django-login

1
推荐指数
1
解决办法
1872
查看次数

Django多用户登录和注销

两个相同类型的用户登录。当其中一个用户更改选项卡时,现在该用户是最后登录的用户({{ user.username }} 更改)。

对我来说更重要的问题是,一旦其中一个注销,另一个就会自动注销。基本上,没有两个用户,一次只有一个,最后登录的用户。
此外,所有视图都是@login_required。

@login_required
def user_logout(request):
    logout(request)
    return HttpResponseRedirect(reverse('login'))


def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
            return HttpResponseRedirect(reverse('success_page'))
        else:
            return render(request, 'login.html')
    else:
        return render(request, 'login.html')
Run Code Online (Sandbox Code Playgroud)

在 settings.py 中:

SESSION_COOKIE_AGE = 24*60*60
LOGIN_URL = '/login/'
Run Code Online (Sandbox Code Playgroud)

我的基本用户表单:

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

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

    class Meta:
        model = User
        fields = ('username', 'email', …
Run Code Online (Sandbox Code Playgroud)

django django-authentication

1
推荐指数
1
解决办法
3156
查看次数

Django:电子邮件以 html 形式发送以进行密码重置

发送的重置密码电子邮件将显示为原始 HTML 内容。并非每个用户都会遇到这种情况,但对于相当数量的用户来说,这个问题就会出现。

\n\n

这是我重置密码的网址:

\n\n
from django.contrib.auth.views import password_reset\nurl(r\'^accounts/password/reset/\', password_reset, {\'template_name\':\'users/login.html\',\'html_email_template_name\':\'registration/password_reset_email.html\', \'post_reset_redirect\':\'/users/accounts/login/?reset=1\', \'extra_context\':{\'reset\':\'1\'}}, name=\'password_reset\'),\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些是我的密码重置电子邮件模板:

\n\n

注册/password_reset_email.html

\n\n
{% extends \'users/email_base.html\' %}\n\n{% block content %}\n{% load i18n %}\n\n\n  <table width="100%" cellspacing="0" cellpadding="0" border="0" bgcolor="#f0f0f0" align="center">\n      <tbody>\n        <tr>\n          <td style="font-size:0;" align="center">\n            <div style="display:inline-block;width:100%;max-width:800px;vertical-align:top;" class="width800 mrt-30">\n              <!-- ID:BG SECTION-1 -->\n              <table class="display-width" style="max-width:800px;" width="100%" cellspacing="0" cellpadding="0" border="0" bgcolor="#ffffff" align="center">\n                <tbody>\n                  <tr>\n                    <td class="padding" align="center">\n                      <div style="display:inline-block;width:100%;max-width:600px;vertical-align:top;font-family:Ubuntu, sans-serif;" class="main-width">\n                        <table class="display-width-inner" style="max-width:600px;" width="100%" cellspacing="0" cellpadding="0" border="0" align="center">\n                          <tbody>\n                            <tr>\n                              <td style="mso-line-height-rule:exactly;line-height:30px;font-size:0;" …
Run Code Online (Sandbox Code Playgroud)

django html-email django-authentication

1
推荐指数
1
解决办法
2641
查看次数

员工用户无法登录 django 管理面板

我正在尝试在我的 django 应用程序中创建自定义用户模型。但是每当我尝试这样做时,我都无法使用管理面板中的“超级用户”创建的“工作人员用户”登录。它说:

“请输入员工帐户的正确用户名和密码。请注意,这两个字段都可能区分大小写。”

应用名称:后台

后端/models.py

from django.db import models
from django.contrib.auth.models import (
    AbstractBaseUser,
    BaseUserManager
)
# Create your models here.
class UserManager(BaseUserManager):
    
    def create_user(
        self,
        username = None,
        email = None,
        password = None,
        is_active = True,
        is_staff = False,
        is_admin = False
    ):
        if not username:
            raise ValueError("Users must have a username")
        if not password:
            raise ValueError("Users must have a password")
        if not email:
            raise ValueError("Users must have a email")
        
        user_obj = self.model(
            username = username …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-admin django-authentication

1
推荐指数
1
解决办法
2066
查看次数