Django 2.0的问题:"WSGIRequest"对象没有属性"session" [英] Issue with Django 2.0 : 'WSGIRequest' object has no attribute 'session'

查看:42
本文介绍了Django 2.0的问题:"WSGIRequest"对象没有属性"session"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将Django版本从 1.11.5 升级到了 2.0 ,并且试图解决其他不推荐使用的元素.

I upgraded my Django version from 1.11.5 to 2.0 and I'm trying to solve different deprecated element.

但是,即使我的CSS/bootstrap样式表不起作用,也无法克服登录到Django软件的麻烦.我有这个问题:

However, even if my CSS/bootstrap style sheet doesn't work, I don't overcome to log into my Django software. I have this issue :

'WSGIRequest' object has no attribute 'session'

这是整个回溯:

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'

在我的身份验证应用程序中:

In my Authentification app :

# 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文件:

An my models.py file :

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)

在我的settings.py文件中,我有MIDDLEWARE_CLASSES:

In my settings.py file, I have MIDDLEWARE_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 :

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_CLASSES 更改为 MIDDLEWARE 查看全文

相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆