- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让 django_auth_ldap 与自定义用户模型一起工作。经过一番努力,我用一个模型创建了新的应用程序:
class MyUser(django.contrib.auth.models.AbstractUser):
uidNumber = models.IntegerField(unique=True)
在 settings.py 中我有:
AUTH_USER_MODEL = 'test_ldap.MyUser'
AUTH_LDAP_ALWAYS_UPDATE_USER = False
AUTH_LDAP_USER_ATTR_MAP = {"first_name": "firstName", "last_name": "sn", "email": "mail", "uidNumber": "uidNumber"}
AUTH_LDAP_PROFILE_ATTR_MAP = {"home_directory": "homeDirectory", "uidNumber": "uidNumber"}
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=People,ou=Main,o=TECH",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
作为登录页面:
urlpatterns += patterns('',
url(r'^login/$', 'django.contrib.auth.views.login', {
'template_name': 'login.tmpl'
}),
(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),
)
manage.py syncdb 成功。
登录后我有NOT NULL 约束失败:test_ldap_myuser.uidNumber。看起来 LDAP 后端正在尝试仅使用默认类 User 数据保存用户。
Environment:
Request Method: POST
Request URL: http://localhost:8000/login/
Django Version: 1.6.5
Python Version: 2.7.5
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'test_ldap')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
75. return view(request, *args, **kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
99. response = view_func(request, *args, **kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
52. response = view_func(request, *args, **kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/contrib/auth/views.py" in login
36. if form.is_valid():
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
129. return self.is_bound and not bool(self.errors)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/forms/forms.py" in errors
121. self.full_clean()
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
274. self._clean_form()
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/forms/forms.py" in _clean_form
300. self.cleaned_data = self.clean()
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/contrib/auth/forms.py" in clean
189. password=password)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in authenticate
49. user = backend.authenticate(**credentials)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django_auth_ldap/backend.py" in authenticate
158. user = ldap_user.authenticate(password)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django_auth_ldap/backend.py" in authenticate
330. self._get_or_create_user()
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django_auth_ldap/backend.py" in _get_or_create_user
529. self._user, created = self.backend.get_or_create_user(username, self)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django_auth_ldap/backend.py" in get_or_create_user
223. return model.objects.get_or_create(**kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/manager.py" in get_or_create
154. return self.get_queryset().get_or_create(**kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/query.py" in get_or_create
391. six.reraise(*exc_info)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/query.py" in get_or_create
383. obj.save(force_insert=True, using=self.db)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/base.py" in save
545. force_update=force_update, update_fields=update_fields)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/base.py" in save_base
573. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/base.py" in _save_table
654. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/base.py" in _do_insert
687. using=using, raw=raw)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/manager.py" in _insert
232. return insert_query(self.model, objs, fields, **kwargs)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/query.py" in insert_query
1514. return query.get_compiler(using=using).execute_sql(return_id)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
903. cursor.execute(sql, params)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/backends/util.py" in execute
69. return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/backends/util.py" in execute
53. return self.cursor.execute(sql, params)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/utils.py" in __exit__
99. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/backends/util.py" in execute
53. return self.cursor.execute(sql, params)
File "/home/moonwolf/Dokumenty/projects/python/virtualenv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py" in execute
451. return Database.Cursor.execute(self, query, params)
Exception Type: IntegrityError at /login/
Exception Value: NOT NULL constraint failed: test_ldap_myuser.uidNumber
所以我尝试使用 populate_user 信号,如文档中所述:
@receiver(django_auth_ldap.backend.populate_user)
def ldap_populate_user_receiver(sender, user=None, ldap_user=None, **kwargs):
print "Signal received"
# set uidNumber accordingly
(我把它放在models.py中)
但是这个函数没有输出(它根本没有被调用)。当我将用户模型改回默认 User 时,一切正常(并且出现信号输出 - 在这种情况下,当然不需要更改任何数据)。看起来像 django 试图将数据写入数据库(get_or_create_user())或其他东西?
我做错了什么?
最佳答案
我设法解决了这个问题。我使用了默认的 auth.User 并添加了带有指向它的 ForeignKey 的模型。在这个模型中,我将拥有我需要的额外属性。通过与 LDAP 后端进行某种同步(例如,在创建新用户的情况下),这应该可行。
关于python - django_auth_ldap 自定义 AUTH_USER_MODEL IntegrityError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24081012/
我在 app_name 文件夹的根目录下的 django 应用程序中运行脚本;就像在 app_name>app_name 中一样。 在脚本的顶部,我有这个: import os import sys
我正在使用 sqlite 数据库,我将模型声明为: class User(db.Model): __tablename__ = 'users' id = db.Column(db.In
我正在使用 sqlite 数据库并且我在这个要点中声明了模型 https://gist.github.com/mmahesh/7245561 我添加了一个带有事务管理器的模型实例作为 with tra
我的网页的注册 View (如下)通过 Django 的身份验证模型 User 创建了一个新用户,然后使用该新创建的用户 ID 通过我自己的模型 account.Users 添加更多信息。我的问题是,
我正在尝试使用复合主键创建一个表。它有一个整数和两个字符串字段作为键。当我提交 session 时,它会引发 IntegrityError .我在做什么有什么问题? class Targets(db.
当我尝试将新条目保存到名为“config”的表中时遇到了这个问题, class Config(models.Model): ident = models.CharField(max_lengt
找不到解决方案。我现在传递一个元组列表,其中包含要插入的信息而不是从其他表中提取的信息,问题就消失了。 我目前正在编写将要编辑表格的代码。我有几行信息要插入,但无论顺序如何,我总是在第四个元素上收到
我有 python 线程应用程序 + Postgres。我正在使用 Django 的 ORM保存到 Postgres.. 我有并发保存调用。偶尔有 2 个线程保存导致问题的相同主键。 Postgres
有人可以向我解释如何正确测试 Postgres 数据库错误,尤其是 IntegrityError。例如我有下一个测试: class TestSlugs(TestCase): # This sl
我在尝试删除 User 时收到 IntegrityError: IntegrityError: (1451, 'Cannot delete or update a parent row: a fo
在 python 中,我正在使用 importmany 填充 SQLITE 数据库,因此我可以一次导入数万行数据。我的数据包含在元组列表中。我在数据库中设置了我想要的主键。 我遇到的问题是主键错误会引
每当尝试附加文件时,我的应用程序(本地)都会引发ActiveStorage::IntegrityError错误。我如何摆脱这个错误? 我只有一个has_one_attached,但我不知道该错误是如何
我想插入几个User数据库中的行。我真的不在乎插入是否成功,只要我得到通知,在这两种情况下我都能做到,那么哪一个在性能(主要是速度)方面更好? 始终插入行(通过调用模型的 save 方法)并捕获潜在的
我开始使用 factory_boy 包,所以我设置了一些工厂并想测试创建的对象不会引发任何验证错误。 这是我正在使用的 mixin,它基本上从模块中获取每个工厂,创建一个实例,然后测试 .full_c
我有一个模型 LucyGuide,它通过 OneToOneField 扩展了 Django 的 User 模型: class LucyGuide(models.Model): user = m
我有一个模型 LucyGuide,它通过 OneToOneField 扩展了 Django 的 User 模型: class LucyGuide(models.Model): user = m
我正在尝试在 Django 中创建配方/成分模型 在我的 models.py 中我得到了 class Ingredient(models.Model): name = models.CharF
我正在使用 Django 构建一个简单的博客应用程序。我想实现使用表单添加新博客的功能。出现一些问题。 这是我的 models.py from django.db import models from
我知道还有许多其他问题与完全相同的问题有关,但我已经尝试过他们的答案,但到目前为止没有一个有效。 我正在尝试从与其他表有关系的表中删除记录。这些表中的外键是 nullable=false ,因此尝试删
我正在与普通/ guest 用户一起处理我的结帐 View ,但很难解决完整性错误。想法是让访客用户仅使用电子邮件注册才能结帐,我需要将用户电子邮件设置为唯一。 模型.py from django.c
我是一名优秀的程序员,十分优秀!