【问题标题】:'function' object has no attribute 'get' error in django'function'对象在django中没有属性'get'错误
【发布时间】:2021-02-27 11:16:03
【问题描述】:

问候亲爱的 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'”

给我错误的代码如下: 视图.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')

urls.py

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    .LoginView.as_view()处理请求,它只是返回一个调度请求的函数,因此你需要调用@结果的函数987654322@,以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 并注册该视图?

    因此,您可以这样做:

    # appname/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 appname.views import MyLoginView
    
    path('login/', MyLoginView.as_view(), name='login-page'),

    【讨论】:

    • 感谢您的回答我知道这看起来很奇怪,但我将其构建为用于安全测试目的的网站。谢谢你的建议
    猜你喜欢
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多