2017-12-05 20 views
6

Djangoのバージョンを1.11.5から2.0にアップグレードしましたが、廃止予定の要素を解決しようとしています。Django 2.0の問題: 'WSGIRequest'オブジェクトに 'session'属性がありません

しかし、私のCSS/bootstrapスタイルシートがうまくいかなくても、私はDjangoソフトウェアにログインするのに苦労しません。私はこの問題を持っている:私の真偽のアプリで

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/Authentification/Login/ 

Django Version: 2.0 
Python Version: 3.6.2 
Installed Applications: 
['Institution', 
'django.conf.urls', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'bootstrapform', 
'django_countries', 
'chartit', 
'Configurations', 
'Home', 
'Authentication', 
'Identity', 
'rest_framework', 
'Fiscal', 
'bootstrap4'] 
Installed Middleware: 
[] 



Traceback: 

File "/Users/valentinjungbluth/Desktop/DatasystemsCORE3.6/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner 
    35.    response = get_response(request) 

File "/Users/valentinjungbluth/Desktop/DatasystemsCORE3.6/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    128.     response = self.process_exception_by_middleware(e, request) 

File "/Users/valentinjungbluth/Desktop/DatasystemsCORE3.6/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    126.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/Users/valentinjungbluth/Desktop/DatasystemsCORE3.6/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    54.   return view_func(*args, **kwargs) 

File "/Users/valentinjungbluth/Desktop/Django/DatasystemsCORE/DatasystemsCore/DatasystemsCORE/Authentication/views.py" in Login 
    26.     login(request, user) 

File "/Users/valentinjungbluth/Desktop/DatasystemsCORE3.6/lib/python3.6/site-packages/django/contrib/auth/__init__.py" in login 
    130.  if SESSION_KEY in request.session: 

Exception Type: AttributeError at /Authentification/Login/ 
Exception Value: 'WSGIRequest' object has no attribute 'session' 

# views.py file 
#-*- coding: utf-8 -*- 

from django.contrib.auth import authenticate, login, logout 
from .forms import ConnexionForm 
from django.shortcuts import render, reverse, get_object_or_404, redirect 
from django.http import HttpResponseRedirect, HttpResponse 
from .models import LoggedUsers 

from API_GED import Logger 

import datetime 
from django.views.decorators.csrf import csrf_exempt,csrf_protect 


@csrf_exempt 
def Login(request): 
    error = False 

    if request.method == "POST": 
     form = ConnexionForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data["username"] 
      password = form.cleaned_data["password"] 
      user = authenticate(username=username, password=password) # Nous vérifions si les données sont correctes 
      if user: # Si l'objet renvoyé n'est pas None 
       login(request, user) 

       response = redirect('Homepage') 

       return response 

      else: # sinon une erreur sera affichée 
       error = True 

    else: 
     form = ConnexionForm() 

    return render(request, 'Authentication_Homepage.html', locals()) 


def Logout(request): 

    logout(request) 

    return redirect(reverse('Choice')) 


def ConnectedUsers(request) : 

    logged_users = LoggedUsers.objects.all() 
    print (logged_users) 

    logged_users_number = LoggedUsers.objects.all().count() 

    context = { 
     "logged_users":logged_users, 
     "logged_users_number":logged_users_number, 
    } 

    return render(request, "Authentication_LoggedUsers.html", context) 

私のmodels.pyファイル:

from django.db import models 
from django.contrib.auth.models import User 
from django.contrib.auth.signals import user_logged_in, user_logged_out 

# class UserProfile(models.Model): 
#  user = models.OneToOneField(User) 
#  avatar = models.ImageField(upload_to='/images/') 

class LoggedUsers(models.Model): 
    user = models.ForeignKey(User, primary_key=True, on_delete=models.CASCADE) 

    def __str__(self): 
     return '{}{}{}'.format(self.user.first_name + " ", self.user.last_name + " (", self.user.username + ")") 

def login_user(sender, request, user, **kwargs): 
     LoggedUsers(user=user).save() 

def logout_user(sender, request, user, **kwargs): 
     try: 
      u = LoggedUsers.objects.get(user=user) 
      u.delete() 
     except LoggedUsers.DoesNotExist: 
      pass 

user_logged_in.connect(login_user) 
user_logged_out.connect(logout_user) 

'WSGIRequest' object has no attribute 'session' 

は、これは全体のトレースバックです

私のsettings.pyファイルに、私はMIDDLを持っていますEWARE_CLASSES:

MIDDLEWARE_CLASSES = [ 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.gzip.GZipMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
    'DatasystemsCORE.middleware.OnlineNowMiddleware', 
] 

EDIT:

私はこのようなMIDDLEWAREを書いた:

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    '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', 
] 

動作するようです!

+0

アップグレードする前に、Django [廃止予定警告なしで実行](https://docs.djangoproject.com/en/2.0/howto/upgrade-version/#resolving-deprecation-warnings)を確認してください。そうすれば、 'WSDIRequest'に関するあいまいなエラーではなく、' MIDDLEWARE_CLASSES'が非推奨になるという有用な警告が出ます。 – Alasdair

答えて

4

MIDDLEWARE_CLASSESに変更MIDDLEWARE_CLASSESはジャンゴ1.10以降廃止されたバージョン2.0で完全に除去しました。つまり、ミドルウェアがまったくないということです。

代わりにMIDDLEWARE設定を使用する必要があります。新しいスタイルのミドルウェアを使用しているため、upgrade your custom middleware classが必要な場合があります。

+0

Django 2.0で新しいプロジェクトを作成すると、なぜsettings.pyにMIDDLEWAREがありますか? – Deadpool

+1

私が言ったように、MIDDLEWAREは使用するものであり、MIDDLEWARE_CLASSESは削除されています。 –

関連する問題