繁体   English   中英

'function' object has no attribute 'get' 错误在 django

[英]'function' object has no attribute 'get' error in django

问候亲爱的 django 专家,我的网站有问题我正在使用 django 中的默认登录视图

from django.contrib.auth import views as auth_views

代码正在运行
像这样在 urls.py 文件中:

from django.contrib.auth import views as auth_views

path('login/',auth_views.LoginView.as_view(template_name='website/login.html'), name='login-page'),

但是使用这种方法,我的views.py 文件中没有视图。 问题是我需要在我的 viwes.py 中定义一个视图来记录访问此页面的任何人的日志问题是当我尝试以下代码时出现错误“'function' object has no attribute 'get'” 错误快照

给我错误的代码如下:views.py

from django.contrib.auth import views as auth_views  

def login(request):
    ip = get_client_ip(request)
    logger.info(f'user access: {request.user} via ip:{ip}')
    return auth_views.LoginView.as_view(template_name='website/login.html')

网址.py

 path('login/',views.login, name='login-page'),

.LoginView.as_view()处理请求,它只是返回一个 function 来分派请求,因此您需要调用 function ,它是.as_view(…)的结果, request作为参数:

from django.contrib.auth import views as auth_views  

def login(request):
    ip = get_client_ip(request)
    logger.info(f'user access: {request.user} via ip:{ip}')
    return auth_views.LoginView.as_view(template_name='website/login.html')(request)

话虽如此,这样做看起来有点奇怪。 为什么不直接LoginView并注册该视图?

因此,您可以这样做:

# /views.py

from django.contrib.auth.views import LoginView

class MyLoginView(LoginView):
    template_name='website/login.html'

    def setup(self, request, *args, **kwargs):
        super().setup(request, *args, **kwargs)
        ip = get_client_ip(request)
        logger.info(f'user access: {request.user} via ip:{ip}')

然后注册您的MyLoginView

from .views import MyLoginView

path('login/', MyLoginView.as_view(), name='login-page'),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM