在我当前的项目中,我正在替换默认的 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
from django.contrib.auth import authenticate, login
from django.contrib.auth.views import login
Run Code Online (Sandbox Code Playgroud)
如果我同时要求"登录",那么理想的做法是什么?谢谢!
我正在开发一个应用程序,在该应用程序中我制作了我的自定义'User'模型,该模型将电子邮件作为用户名,并且它依赖于另一个名为'Company'. 运行命令时,'python manage.py createsuperuser'我需要 django 首先询问我公司并创建公司实例,而不是询问其中'company'是外键的用户模型字段,然后用户提供可能'1'是用户在制作公司对象时已经创建的公司 ID 。
我试图通过在我的应用程序中创建管理文件夹来实现上述功能,但它似乎不起作用。
任何人都可以告诉我正确的方法来做到这一点。
提前致谢。
我正在尝试使用 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) 我正在使用 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 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 …
两个相同类型的用户登录。当其中一个用户更改选项卡时,现在该用户是最后登录的用户({{ 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) 发送的重置密码电子邮件将显示为原始 HTML 内容。并非每个用户都会遇到这种情况,但对于相当数量的用户来说,这个问题就会出现。
\n\n这是我重置密码的网址:
\n\nfrom 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\'),\nRun 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 应用程序中创建自定义用户模型。但是每当我尝试这样做时,我都无法使用管理面板中的“超级用户”创建的“工作人员用户”登录。它说:
“请输入员工帐户的正确用户名和密码。请注意,这两个字段都可能区分大小写。”
应用名称:后台
后端/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
django ×10
python ×6
django-admin ×2
django-forms ×1
django-login ×1
django-views ×1
html-email ×1
python-2.7 ×1
python-3.x ×1