для нового проекта.

аюсь научить себя Python \ Django. Он был построен в Visual Studio с начальным сайтом Django, поэтому все файлы settings.py и т. Д. Были предварительно собраны и добавлены.

Когда я пытаюсь войти на сайт с сервера IIS, я получаю:

AttributeError в / login / объект 'WSGIRequest' не имеет атрибута 'session'

хотя, когда я пытаюсь запустить его на моей локальной машине изpython manage.py runserver это работает просто отлично.

django.VERSION (2, 0, 0, 'final', 0)

settings.py:

<pre><code>import os import posixpath BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = 'c94808af-46cc-47da-b465-4e66803a8324' DEBUG = True ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ 'app', # Add your apps here to enable them 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] 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.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'AllFlexHub.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'AllFlexHub.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True STATIC_URL = '/static/' STATIC_ROOT = posixpath.join(*(BASE_DIR.split(os.path.sep) + ['static'])) </code></pre>



views.py:

<pre><code> from django.contrib.auth import login, authenticate from django.contrib.auth.forms import UserCreationForm from django.shortcuts import render, redirect, render_to_response, get_object_or_404 from django.http import HttpRequest, HttpResponseRedirect from django.template import RequestContext from datetime import datetime from app.models import * from app.forms import * def home(request): """Renders the home page.""" assert isinstance(request, HttpRequest) return render( request, 'app/index.html', { 'title':'Home Page', 'year':datetime.now().year, } ) def Register(request): if request.method == "POST": form = RegisterUser(request.POST) if form.is_valid(): new_user = User.objects.create_user(**form.cleaned_data) return HttpResponseRedirect('') else: form = RegisterUser() return render(request, 'app\Register.html', {'form': form}) def contact(request): """Renders the contact page.""" assert isinstance(request, HttpRequest) return render( request, 'app/contact.html', { 'title':'Contacts', 'year':datetime.now().year, } ) def about(request): """Renders the about page.""" assert isinstance(request, HttpRequest) return render( request, 'app/about.html', { 'title':'About', 'message':'All Flex IT Tools.', 'year':datetime.now().year, } ) def problemreports(request): """Renders the home page.""" assert isinstance(request, HttpRequest) return render( request, 'app/problemreport.html', { 'reports': PRTickets.objects.filter(Status__startswith='Act'), 'title':'Problem Reports', 'year':datetime.now().year, } ) def myPRs(request): """Renders the home page.""" assert isinstance(request, HttpRequest) return render( request, 'app/problemreport.html', { 'reports': PRTickets.objects.filter(User=User.objects.get(username=request.user.username)), 'title':'Problem Reports', 'year':datetime.now().year, } ) def Closed(request): """Renders the home page.""" assert isinstance(request, HttpRequest) return render( request, 'app/problemreport.html', { 'reports': PRTickets.objects.filter(Status__startswith='Close'), 'title':'Problem Reports', 'year':datetime.now().year, } ) def SearchPRs(request): if request.method == "POST": Sval = request.POST['SearchField'] frm = request.POST['SearchOption'] form = Search() if frm == "Ticket_Number": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(Ticket_Number__icontains = Sval), 'form': form}) elif frm == "User": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(User__icontains = Sval), 'form': form}) elif frm == "Title": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(Title__icontains = Sval), 'form': form}) elif frm == "Bldg": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(Bldg__icontains = Sval), 'form': form}) elif frm == "Description": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(Description__icontains = Sval), 'form': form}) elif frm == "Computer": return render(request, 'app\SearchPRs.html', {'reports': PRTickets.objects.filter(Computer__icontains = Sval), 'form': form}) elif frm == "Status": return render(request, 'app\SearchPRs.html', { 'reports': PRTickets.objects.filter(Status__icontains = Sval), 'form': form}) form = Search() else: form = Search() return render(request, 'app\SearchPRs.html', {'form': form}) def PRNewItem(request): if request.method == "GET": form = PRticektform(initial={'User': User.objects.get(username=request.user.username)}) return render( request, 'app/NewItem.html', { 'form':form , 'now':datetime.now(), 'title': 'SEARCH', } ) return render(request, 'app/NewItem.html', ) elif request.method == "POST": form = PRticektform(request.POST) form.save() return HttpResponseRedirect('/problemreports') def EditPR(request, name): if request.method == 'POST': val = PRTickets.objects.get(Ticket_Number=name) val.User = request.POST['User'] val.Title = request.POST['Title'] val.Bldg = request.POST['Bldg'] val.Computer = request.POST['Computer'] val.Description = request.POST['Description'] val.Status = request.POST['Status'] val.save() cmmts = Comments(Comment=request.POST['Comment'], User=User.objects.get(username=request.user.username), Related_PR=val) cmmts.save() return HttpResponseRedirect('/problemreports') else: PRinfo = PRTickets.objects.get(Ticket_Number=name) form = EditPRs( initial={ 'User': PRinfo.User, 'Title': PRinfo.Title, 'Bldg': PRinfo.Bldg, 'Computer': PRinfo.Computer, 'Description': PRinfo.Description, 'Status': PRinfo.Status, } ) return render(request, 'app/EditPR.html', {'form': form, 'PRNumber': name, 'title': name, 'Fields': PRTickets.objects.get(Ticket_Number=name), 'Comms': Comments.objects.filter(Related_PR=name), } ) </code></pre>



urls.py:
""" Definition of urls for ITWebsite. """

<pre><code>from datetime import datetime from django.conf.urls import url import django.contrib.auth.views import app.forms import app.views # Uncomment the next lines to enable the admin: # from django.conf.urls import include # from django.contrib import admin # admin.autodiscover() urlpatterns = [ # Examples: url(r'^$', app.views.home, name='home'), url(r'^contact$', app.views.contact, name='contact'), url(r'^about', app.views.about, name='about'), url(r'^Register', app.views.Register, name='Register'), url(r'^problemreports$', app.views.problemreports, name='problemreports'), url(r'^problemreports/NewItem', app.views.PRNewItem, name='PRNewItem'), url(r'^problemreports/MyProblemReports', app.views.myPRs, name='myPRs'), url(r'^problemreports/Closed', app.views.Closed, name='Closed'), url(r'^problemreports/SearchPRs', app.views.SearchPRs, name='SearchPRs'), url(r'^problemreports/(\d{1,10})', app.views.EditPR, name='EditPR'), url(r'^login/$', django.contrib.auth.views.login, { 'template_name': 'app/login.html', 'authentication_form': app.forms.BootstrapAuthenticationForm, 'extra_context': { 'title': 'Log in', 'year': datetime.now().year, } }, name='login'), url(r'^logout$', django.contrib.auth.views.logout, { 'next_page': '/', }, name='logout'), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # url(r'^admin/', include(admin.site.urls)), ] </code></pre>

 404 Profile Not Found11 дек. 2017 г., 17:42
обновлен с помощью urls.py и views.py и добавил их как «код»
 Alasdair11 дек. 2017 г., 17:05
Какую версию Django вы используете?
 John Gordon11 дек. 2017 г., 17:05
Опубликуйте свойurls.py а такжеviews.py модули.
 404 Profile Not Found11 дек. 2017 г., 17:55
Импортируя django и запуская .VERSION, он показывает (2, 0, 0, 'final', 0)
 John Gordon11 дек. 2017 г., 17:05
Не размещайте код как скриншоты; это только затрудняет нам помочь вам.

Ответы на вопрос(1)

Решение Вопроса

MIDDLEWARE_CLASSES настройкаустарел в Django 1.10, а такжеудалено в Django 2.0.

Вы должны определитьMIDDLEWARE в ваших настройках вместо.

SessionAuthenticationMiddleware был удален в Django 2.0, поэтому вы должны удалить его из списка.

 Alasdair11 дек. 2017 г., 17:17
Пожалуйста, включите полный ответ на свой вопрос и скажите, какую версию Django вы используете.
 404 Profile Not Found11 дек. 2017 г., 17:13
Я удалил «_CLASSES» и остановил веб-сайт / сохраненный / перезапущенный веб-сайт в iis, и он все еще имеет ту же ошибку.
 Alasdair11 дек. 2017 г., 18:11
У тебя все еще естьSessionAuthenticationMiddleware в вашем спискеMIDDLEWARE, Это было удалено в Django 2.0.документы, с которыми я связан показать по умолчаниюMIDDLEWARE для нового проекта.
 404 Profile Not Found11 дек. 2017 г., 18:10
На самом деле я начал получать 500 ошибок на странице, когда я просто MIDDLEWARE
 John Gordon11 дек. 2017 г., 17:33
Может быть недостаточно просто переименоватьMIDDLEWARE_CLASSES установка наMIDDLEWARE - он может иметь другой формат, другой порядок и т. д.

Ваш ответ на вопрос