使用Django 1.10
我使用自定义后端登录时没有问题(不是自定义用户只是auth),但在1.11rc1
我收到以下异常:
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/login/?next=/admin/
Django Version: 1.11rc1
Exception Type: FieldError
Exception Value:
Cannot resolve keyword 'request' into field. Choices are: clientcontact, crudevent, date_joined, email, <...just more fields>
后端:
def authenticate(self, **kwargs):
if kwargs:
username = kwargs.pop("username", None)
if username:
username_or_email = Q(username=username) | Q(email=username)
password = kwargs.pop("password", None)
try:
user = User.objects.get(username_or_email, **kwargs)
except User.DoesNotExist:
pass
else:
if user.check_password(password):
return user
else:
...
在settings.py
:
AUTHENTICATION_BACKENDS = ('base_app.auth_backend.JbcBackend', 'guardian.backends.ObjectPermissionBackend',)
如果有人能指出我正确的方向,那我就找不到任何东西了。 这是完整的追溯:
Traceback:
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/channels/handler.py" in process_exception_by_middleware
237. return super(AsgiHandler, self).process_exception_by_middleware(exception, request)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/contrib/admin/sites.py" in login
393. return LoginView.as_view(**defaults)(request)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
76. return view(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/contrib/auth/views.py" in dispatch
90. return super(LoginView, self).dispatch(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/generic/base.py" in dispatch
88. return handler(request, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/views/generic/edit.py" in post
182. if form.is_valid():
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/forms/forms.py" in is_valid
183. return self.is_bound and not self.errors
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/forms/forms.py" in errors
175. self.full_clean()
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/forms/forms.py" in full_clean
385. self._clean_form()
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/forms/forms.py" in _clean_form
412. cleaned_data = self.clean()
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/contrib/auth/forms.py" in clean
187. self.user_cache = authenticate(self.request, username=username, password=password)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/contrib/auth/__init__.py" in authenticate
100. user = backend.authenticate(*args, **credentials)
File "/home/mat/PycharmProjects/jbc_services/base_app/auth_backend.py" in authenticate
19. user = User.objects.get(username_or_email, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/query.py" in get
370. clone = self.filter(*args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/query.py" in filter
781. return self._filter_or_exclude(False, *args, **kwargs)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/query.py" in _filter_or_exclude
799. clone.query.add_q(Q(*args, **kwargs))
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/sql/query.py" in add_q
1260. clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/sql/query.py" in _add_q
1286. allow_joins=allow_joins, split_subq=split_subq,
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/sql/query.py" in build_filter
1164. lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/sql/query.py" in solve_lookup_type
1044. _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "/home/mat/.virtualenvs/jbcarcenv/lib/python3.6/site-packages/django/db/models/sql/query.py" in names_to_path
1362. "Choices are: %s" % (name, ", ".join(available)))
Exception Type: FieldError at /admin/login/
Exception Value: Cannot resolve keyword 'request' into field. Choices are: clientcontact, crudevent, date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, logged_in_user, loginevent, password, thirdpartycontact, user_bookmarks, user_permissions, user_preferences, username, userobjectpermission
答案 0 :(得分:1)
try:
user = User.objects.get(username_or_email)
# The user is found, now check if the password matches
if user.check_password(password):
return user
except User.DoesNotExist:
pass
...