标签: django-middleware

'WSGIRequest'对象没有属性'user'

我想在我的django项目中创建一个auth模块.但是,当我打开我的网站url时,我有一个错误:'WSGIRequest'对象没有属性'user'

我试图找到有关此问题的信息,有人说问题出在MIDDLEWARE_CLASSES中,但我无法理解.

这是我的MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

MyProject的/ admin.py

from django.contrib import admin
from personal_area.models import UserProfile

admin.site.register(UserProfile)
Run Code Online (Sandbox Code Playgroud)

MyProject的/ forms.py

from personal_area.models import UserProfile
from django.contrib.auth.models import User
from django import forms


class UserForm(forms.Model):
    password = forms.CharField(widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ('username', 'email', 'password')


class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('website', 'picture')
Run Code Online (Sandbox Code Playgroud)

MyProject的/ models.py

from django.db import models
from django.contrib.auth.models import User


class UserProfile(models.Model):

    user = models.OneToOneField(User) …
Run Code Online (Sandbox Code Playgroud)

django django-middleware

2
推荐指数
2
解决办法
2万
查看次数

Django Middleware:如何从中间件访问视图的参数

假设我有一个观点:

def pony_view(request, arg1, arg2):
    ... Make ponies, etc ...
Run Code Online (Sandbox Code Playgroud)

和中间件:

class MyMiddleware(object):
    def process_request(request):
        # How do I access arg1, arg2 here?
Run Code Online (Sandbox Code Playgroud)

当然arg1和arg2将通过URL params与urls.py传递.

我需要这样做的原因是因为我想在view函数运行之前向request.session添加一些东西(虽然我需要从URL中获取).

django django-middleware

1
推荐指数
1
解决办法
2073
查看次数

Django:在中间件中检索会话或cookie

我可以在中间件中获取当前会话或cookie吗?

我试过但是我得到了:

'WSGIRequest' object has no attribute 'session'
Run Code Online (Sandbox Code Playgroud)

python django django-middleware django-sessions

1
推荐指数
1
解决办法
650
查看次数

由django中间件引起的重定向循环

我正在尝试在注册后立即重定向用户以转到协议条款页面。

这是我的中间件课程:

class TermsMiddleware(object):

    def process_request(self, request):
        if request.user.profile.filled_terms is None:
            return redirect(reverse('terms')) 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,可以快速浏览一下我的服务器:

This webpage has a redirect loop
Run Code Online (Sandbox Code Playgroud)

我有一个带有fill_terms字段的Profile模型类。

我有一个术语模板,当我手动访问它时,它工作得很好。

这也是我的网址匹配器:

url(r'^terms/', 'hana.views.terms', name='terms')
Run Code Online (Sandbox Code Playgroud)

我如何摆脱这种重定向循环,并使用中间件将注册用户重定向到协议条款页面?

python django redirect middleware django-middleware

1
推荐指数
1
解决办法
1580
查看次数

自定义中间件类会引发错误

我想创建一个非常简单的中间件,只需在每个请求上打印"OK".问题是它会引发错误:

Traceback (most recent call last):
  File "c:\python27\Lib\wsgiref\handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\wsgi.py", line 170, in __call__
    self.load_middleware()
  File "C:\Users\Milano\Desktop\Projekty\venvs\sfl_venv\lib\site-packages\django\core\handlers\base.py", line 52, in load_middleware
    mw_instance = mw_class()
TypeError: __init__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

中间件类在 project/project/middleware.py

middleware.py

class UserHasProfileMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        print 'OK'
        return response
Run Code Online (Sandbox Code Playgroud)

SETTINGS.PY

MIDDLEWARE_CLASSES = (
    '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', …
Run Code Online (Sandbox Code Playgroud)

python django django-middleware

1
推荐指数
1
解决办法
917
查看次数

django - 该页面未正确重定向

我有一个检查用户配置文件的中间件.如果auth用户没有配置文件,则重定向到用户配置文件.我的浏览器显示错误The page isn’t redirecting properly.

class Check(MiddlewareMixin):
    def process_request(self, request):
        if request.user.is_authenticated():
            user = request.user
            try:
                profile = Profile.objects.get(user_id = user)
                if profile:
                    pass
            except ObjectDoesNotExist:
                return HttpResponseRedirect('/accounts/profile/')
Run Code Online (Sandbox Code Playgroud)

我用了django-allauth.

django django-middleware django-allauth

1
推荐指数
1
解决办法
1271
查看次数

导入错误:模块“whitenoise.middleware”未定义“WhiteNoiseMiddleWare”属性/类

在我的 Django 应用程序中,白噪声通过以下方式起作用:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleWare',
Run Code Online (Sandbox Code Playgroud)

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)

我正在将 django 应用程序部署到 heroku。我收到以下错误。白噪声安装成功。

[2018-03-27 01:38:12 +0000] [9] [ERROR] Exception in worker process

ImportError: Module "whitenoise.middleware" does not define a "WhiteNoiseMiddleWare" attribute/class
Run Code Online (Sandbox Code Playgroud)

下面是我的堆栈跟踪。我包含了完整的堆栈跟踪,以便可以了解完整的情况。事实上,我不确定现在发生了什么,而且相当令人沮丧。Heroku 整天都在和我战斗。

File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 244, in handle_chld
2018-03-27T01:38:04.953208+00:00 app[web.1]:     self.reap_workers()
2018-03-27T01:38:04.953232+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 524, in reap_workers
2018-03-27T01:38:04.953390+00:00 app[web.1]:     raise HaltServer(reason, self.WORKER_BOOT_ERROR)
2018-03-27T01:38:04.953555+00:00 app[web.1]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
2018-03-27T01:38:05.121702+00:00 heroku[web.1]: State changed from starting to crashed
2018-03-27T01:38:05.123683+00:00 heroku[web.1]: State changed from …
Run Code Online (Sandbox Code Playgroud)

python deployment heroku django-middleware whitenoise

1
推荐指数
1
解决办法
2518
查看次数

Django JWT身份验证-用户在中间件中是匿名的

我正在使用Django JWT启动项目中的身份验证系统。另外,我有一个中间件,问题是在内部,该用户由于某种原因是匿名的,而在该视图中,我可以通过访问该正确的用户request.user。这个问题使我发疯,因为前一段时间该代码运行良好!这是JWT的错误,还是我做错了什么?

class TimezoneMiddleware(MiddlewareMixin):
         def process_request(self, request):
            # request.user is ANONYMOUS HERE !!!!
            if not request.user.is_anonymous:
                  tzname = UserProfile.objects.get(user = request.user).tz_name
                  if tzname:
                       timezone.activate(pytz.timezone(tzname))
Run Code Online (Sandbox Code Playgroud)

相关的settings.py模块:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_RENDERER_CLASSES': (
        'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
        # Any other renders
    ),

    'DEFAULT_PARSER_CLASSES': (
        'djangorestframework_camel_case.parser.CamelCaseJSONParser',
        # Any other parsers
    ),
}

JWT_AUTH = {
    'JWT_ENCODE_HANDLER':
    'rest_framework_jwt.utils.jwt_encode_handler',

    'JWT_DECODE_HANDLER':
    'rest_framework_jwt.utils.jwt_decode_handler',

    'JWT_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_payload_handler',

    'JWT_PAYLOAD_GET_USER_ID_HANDLER':
    'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',

    'JWT_RESPONSE_PAYLOAD_HANDLER': 'rest_framework_jwt.utils.jwt_response_payload_handler', 
    # 'rest_authentication.views.jwt_response_payload_handler',
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_PUBLIC_KEY': None,
    'JWT_PRIVATE_KEY': None,
    'JWT_ALGORITHM': 'HS256', …
Run Code Online (Sandbox Code Playgroud)

django-middleware django-rest-framework-jwt

1
推荐指数
1
解决办法
1010
查看次数

Django rest框架自定义响应中间件

我使用带有 rest_auth (/login, /logout/, /register...) 的 Django Rest Framework 我有一个中间件,通常由 user_logged_in 或 user_logged_out 信号触发。

在我的中间件中,我想使用 Rest 框架中的 Response 对象。

我的中间件.py

from django.contrib.sessions.models import Session
from django.contrib.auth import logout
from django.contrib.auth.models import AnonymousUser
from rest_framework.response import Response
from rest_framework import status


class OneSessionPerUserMiddleware:
    def __init__(self, get_response):

        self.get_response = get_response

    def __call__(self, request):

        if request.user.is_authenticated:
            if request.user.session_key != Session.objects.filter(session_key__in = request.user.session_key):
                logout(request)
                return Response(request)
        return self.get_response(request)
Run Code Online (Sandbox Code Playgroud)

我想我通过了我的条件,但我收到了这个错误:

 The response content must be rendered before it can be accessed
Run Code Online (Sandbox Code Playgroud)

如何在中间件中正确使用 API Response 对象? …

django django-middleware django-rest-framework

1
推荐指数
1
解决办法
6223
查看次数

中间件更新request.user,但request.user在视图中变成AnonymousUser

我编写了一个简单的 JWT 中间件来从 JWT 获取用户。该方法get_user_from_jwt返回一个 User 对象。

# app.middlewares.py

class JwtMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        self.process_request(request)
        return self.get_response(request)

    def process_request(self, request):
        request.user = self.get_user_from_jwt(request.headers)

    def get_user_pk_from_jwt(self, auth_header: str) -> int:
        _, token = auth_header.split(' ')
        decoded_payload = jwt.decode(token, settings.SECRET_KEY)
        user_pk = decoded_payload.get('user_id', None)
        return user_pk

    def get_user_from_jwt(self, auth_header: str) -> User:
        auth_header = headers.get('Authorization', None)
        if auth_header:
            try:
                user_pk = self.get_user_pk_from_jwt(auth_header)
                user = get_object_or_404(User, pk=user_pk)
                return user
            except Exception as error:
                logging.error(f'Error decoding …
Run Code Online (Sandbox Code Playgroud)

django django-middleware django-views django-rest-framework

0
推荐指数
1
解决办法
2872
查看次数