2017-12-05 38 views
6

मैंने अपने Django संस्करण को 1.11.5 से 2.0 पर अपग्रेड किया है और मैं अलग-अलग बहिष्कृत तत्व को हल करने का प्रयास कर रहा हूं।Django 2.0 के साथ समस्या: 'WSGIRequest' ऑब्जेक्ट में कोई विशेषता 'सत्र'

हालांकि, अगर मेरा सीएसएस/बूटस्ट्रैप स्टाइल शीट काम नहीं करता है, तो भी मैं अपने Django सॉफ़्टवेयर में लॉग इन करने के लिए नहीं हूं। मैं इस मुद्दा है:

'WSGIRequest' object has no attribute 'session' 

इस पूरी Traceback है:

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' 

मेरी Authentification ऐप्लिकेशन में:

# 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) 

मेरी सेटिंग्स.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', 
] 

कोई विचार?

संपादित करें:

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', 
] 

यह काम करने के लिए लगता है:

मैं MIDDLEWARE इस तरह लिखा है!

+0

अपग्रेड करने से पहले, सुनिश्चित करें कि Django [बहिष्करण चेतावनियों के बिना चलता है] (https://docs.djangoproject.com/en/2.0/howto/upgrade-version/#resolving-deprecation-warnings)। इस तरह आपको 'WSGIRequest' के बारे में अस्पष्ट त्रुटि के बजाय' MIDDLEWARE_CLASSES' को बहिष्कृत करने के बारे में एक उपयोगी चेतावनी मिलेगी। – Alasdair

उत्तर

4

MIDDLEWARE_CLASSES Django 1.10 के बाद से बहिष्कृत कर दिया गया करने के लिए बदल गया है और 2.0 संस्करण में पूरी तरह से हटा दिया गया था। इसका मतलब है कि आपके पास कोई मिडलवेयर नहीं है।

आपको इसके बजाय MIDDLEWARE सेटिंग का उपयोग करना चाहिए; नोट, जो नए स्टाइल मिडलवेयर का उपयोग करता है, आपको upgrade your custom middleware class की आवश्यकता हो सकती है।

+0

तो अगर मैं Django 2.0 के साथ एक नई परियोजना बना रहा हूं, तो सेटिंग.py में MIDDLEWARE है? – Deadpool

+1

क्योंकि, जैसा कि मैंने कहा था, MIDDLEWARE उपयोग करने वाली चीज़ है और MIDDLEWARE_CLASSES को हटा दिया गया है। –

संबंधित मुद्दे