2017-03-28 104 views
1

使用Django 1.10我用我的自定義後臺登錄(不是自定義用戶只需在auth),但在1.11rc1我得到下面的異常都沒有問題:不能註冊自定義後端管理員在Django 1.11.rc1

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 
+1

嘗試僅僅用username_or_email查找用戶(不kwargs),然後也驗證密碼。 – xtranophilist

+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 
... 
+1

完美,謝謝。我需要深入瞭解原因。 –

+2

@The_Cthulhu_Kid'request'現在作爲'kwarg'進行驗證,這就是爲什麼。 –

+0

@SimonCharette謝謝! –