我正在使用Django 1.10。我有以下設置:爲什麼Django認證不能識別request.user變量?
settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'IFTHQ',
'rest_framework'
]
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',
]
Views.py:
from django.shortcuts import render
from IFTHQ import models
from django.contrib.auth.decorators import login_required
# Create your views here.
def home(request):
"""A view of all bands."""
return render(request, 'IFTHQ/publicpages/front.html')
@login_required(login_url="login/")
def dashboard(request):
member = models.Member.objects.get(id=request.user.id)
data = {}
data["profile"] = member
return render(request, 'IFTHQ/dashboard/dashboard.html', {"data": data})
@login_required(login_url="login/")
def membership(request):
data = {}
data["profile"] = member
return render(request, 'IFTHQ/dashboard/membership.html', {"data": data})
我證實,有一名成員在成員對象,但是,當我登錄時,我得到這個錯誤:
Environment:
Request Method: GET
Request URL: http://<<domain>>/
Django Version: 1.10.2
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'IFTHQ',
'rest_framework']
Installed 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']
Traceback:
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/home/arcee123/trekfed/trekfed/IFTHQ/views.py" in dashboard
14. member = models.Member.objects.get(id=request.user.id)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/query.py" in get
385. self.model._meta.object_name
Exception Type: DoesNotExist at/
Exception Value: Member matching query does not exist.
它似乎沒有找到request.user.id
的成員。我錯過了什麼?謝謝。
更新1: 會員型號:
class Member(models.Model):
User = models.OneToOneField(User, related_name='user')
FID = models.FloatField()
backup_email = models.CharField(max_length=512)
FName = models.CharField(max_length=100)
MName = models.CharField(max_length=100, blank=True)
LName = models.CharField(max_length=100)
Avatar = models.FileField(upload_to='Avatar/%Y/%m/%d', blank=True)
Cover = models.FileField(upload_to='Cover/%Y/%m/%d', blank=True)
Facebook = models.URLField(default='', blank=True)
GooglePlus = models.URLField(default='', blank=True)
Twitter = models.URLField(default='', blank=True)
Website = models.URLField(default='', blank=True)
Bio = models.TextField(default='', blank=True)
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
Gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Hair_Choices = (
('Blond', 'Blond'),
('Black', 'Black'),
('Brown', 'Brown'),
('Brunette', 'Brunette'),
('Red', 'Red'),
('Auburn', 'Auburn'),
('Gray', 'Gray'),
('White', 'White'),
('Colorful', 'Colorful'),
('None', 'None'),
('N/A', 'Not Applicable')
)
Hair = models.CharField(max_length=25, choices=Hair_Choices)
Height = models.FloatField()
def __str__(self):
return self.FName + " " + self.LName
def shortrank(self):
return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.SName
def currentrank(self):
return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.LongName
def rank_img(self):
return Rank.objects.filter(User=self.id).order_by("-date_promoted")[0].Rank.image
def primary_address(self):
return MemberAddress.objects.get(AddressFK=self.id, Default=True)
def primary_phone(self):
return MemberPhone.objects.get(PhoneFK=self.id, Default=True)
def awards(self):
return Award.objects.filter(Member=self.id)
這張截圖顯示連接確實存在。
更新2: models.py:
class Member(models.Model):
User = models.OneToOneField(User)
...<More>...
Views.py:
@login_required(login_url="login/")
def dashboard(request):
member = request.user.member
data = {}
data["profile"] = member
return render(request, 'IFTHQ/dashboard/dashboard.html', {"data": data})
新的錯誤:
Environment:
Request Method: GET
Request URL: <<domain.com>>
Django Version: 1.10.2
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'IFTHQ',
'rest_framework']
Installed 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']
Traceback:
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/home/arcee123/trekfed/trekfed/IFTHQ/views.py" in dashboard
14. member = request.user.member
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/utils/functional.py" in inner
235. return func(self._wrapped, *args)
File "/home/arcee123/trekfed/env-trekfed/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py" in __get__
370. self.related.get_accessor_name()
Exception Type: RelatedObjectDoesNotExist at/
Exception Value: User has no member.
「我確認了成員對象中有一個成員」你是什麼意思? 「Member」類是什麼樣的? –
因爲根本沒有一個id等於相關用戶ID的成員?這裏'get_object_or_404'可能更合適。 – Evert
好的。我更新了這個問題。這表明模型和價值確實存在。 – arcee123