前提・実現したいこと
DjangoでTwitterログインを実装しようとしています。
こちらの記事を参考に実装を進めましたがエラーが発生しています。
バージョンは
Django = 2.0.6
python = 3.6.8
social-auth-app-django = 2.9.1
となっています。
発生している問題・エラーメッセージ
sudo python3 manage.py runserver 0.0.0.0:8000でサーバーの起動はできるのですがログインページにアクセスしようとすると以下のようなエラーが発生してしまいます。
[28/Jul/2019 22:31:41] "GET /user/login/ HTTP/1.1" 500 58091 Internal Server Error: /user/login/ Traceback (most recent call last): File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py", line 35, in inner response = get_response(request) File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py", line 128, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py", line 126, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) TypeError: __init__() takes 1 positional argument but 2 were given
該当のソースコード
ディレクトリの構造はこのようになっています。
. ├── db.sqlite3 ├── manage.py ├── spmove │ ├── __init__.py │ ├── __init__.pyc │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── settings.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── settings.py │ ├── settings.pyc │ ├── urls.py │ ├── urls.pyc │ └── wsgi.py └── user_auth ├── __init__.py ├── __init__.pyc ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-36.pyc │ ├── models.cpython-36.pyc │ ├── urls.cpython-36.pyc │ └── views.cpython-36.pyc ├── admin.py ├── admin.pyc ├── apps.py ├── migrations │ ├── __init__.py │ └── __pycache__ │ └── __init__.cpython-36.pyc ├── models.py ├── models.pyc ├── templates │ └── user_auth │ ├── login.html │ ├── logout.html │ └── top.html ├── tests.py ├── urls.py └── views.py
(一部文字列制限のため...で省略させて頂いています)
/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py
python:
1import logging 2import types 3 4from django.conf import settings 5from django.core.exceptions import ImproperlyConfigured, MiddlewareNotUsed 6from django.db import connections, transaction 7from django.urls import get_resolver, set_urlconf 8from django.utils.module_loading import import_string 9 10from .exception import convert_exception_to_response, get_exception_response 11 12...(文字列制限のため省略させていただきます...) 13 14non_atomic_requests: 15 view = transaction.atomic(using=db.alias)(view) 16 return view 17 18 def get_exception_response(self, request, resolver, status_code, exception): 19 return get_exception_response(request, resolver, status_code, exception, self.__class__) 20 21 def get_response(self, request): 22 """Return an HttpResponse object for the given HttpRequest.""" 23 # Setup default url resolver for this thread 24 set_urlconf(settings.ROOT_URLCONF) 25 26 response = self._middleware_chain(request) 27 28 response._closable_objects.append(request) 29 if not getattr(response, 'is_rendered', True) and callable(getattr(response, 'render', None)): 30 response = response.render() 31 32 if response.status_code == 404: 33 logger.warning( 34 'Not Found: %s', request.path, 35 extra={'status_code': 404, 'request': request}, 36 ) 37 38 return response 39 40 ... 41 42 43 elif hasattr(response, 'render') and callable(response.render): 44 for middleware_method in self._template_response_middleware: 45 response = middleware_method(request, response) 46 47 if response is None: 48 raise ValueError( 49 "%s.process_template_response didn't return an " 50 "HttpResponse object. It returned None instead." 51 % (middleware_method.__self__.__class__.__name__) 52 ) 53 54 try: 55 response = response.render() 56 except Exception as e: 57 response = self.process_exception_by_middleware(e, request) 58 59 return response 60 61 def process_exception_by_middleware(self, exception, request): 62 """ 63 Pass the exception to the exception middleware. If no middleware 64 return a response for this exception, raise it. 65 """ 66 for middleware_method in self._exception_middleware: 67 response = middleware_method(request, exception) 68 if response: 69 return response 70 raise
/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py
python
1import logging 2import sys 3from functools import wraps 4 5from django.conf import settings 6from django.core import signals 7from django.core.exceptions import ( 8 PermissionDenied, RequestDataTooBig, SuspiciousOperation, 9 TooManyFieldsSent, 10) 11... 12 13response.render() 14 15 return response 16 17 18def get_exception_response(request, resolver, status_code, exception, sender=None): 19 try: 20 callback, param_dict = resolver.resolve_error_handler(status_code) 21 response = callback(request, **dict(param_dict, exception=exception)) 22 except Exception: 23 signals.got_request_exception.send(sender=sender, request=request) 24 response = handle_uncaught_exception(request, resolver, sys.exc_info()) 25 26 return response 27 28 29... 30
user_auth/urls.py
python
1import django.contrib.auth.views 2from django.urls import path,include 3from . import views 4app_name='user_auth' 5 6urlpatterns=[ 7 path('top/',views.top_page, name="top"), 8 path('login/', 9 django.contrib.auth.views.LoginView, 10 { 11 'template_name': 'user_auth/login.html', 12 }, 13 name='login'), 14 path('logout/', 15 django.contrib.auth.views.LogoutView, 16 { 17 'template_name': 'user_auth/logout.html', 18 }, 19 name='logout'), 20]
試したこと
このエラーが起こる前にこのようなエラーが発生していて、
File "manage.py", line 22, in <module> execute_from_command_line(sys.argv) ... django.contrib.auth.views.login, AttributeError: module 'django.contrib.auth.views' has no attribute 'login'
こちらを参考にさせていただきdjango.contrib.auth.views.login
をdjango.contrib.auth.views.LoginView
に、django.contrib.auth.views.logout
をdjango.contrib.auth.views.LogoutView
に変更させていただくとこのエラーは消えましたが、今回のエラーを解決できなかったので質問させていただいた次第です。初心者故至らないところもありますが何卒よろしくお願い申し上げます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/10 14:53