【问题标题】:what exactly does request.user return in django, can we compare it with a string?request.user 在 django 中究竟返回了什么,我们可以将它与字符串进行比较吗?
【发布时间】:2021-06-17 04:32:03
【问题描述】:

我是 Django 新手,正在尝试一些东西。如果普通用户访问“\create”页面(调用名为medicine_create_view的函数),我正在考虑返回一个名为“in_accessable.html”的页面, else drug_create.html。

管理员的名字是“npend”(使用print(request.user)检查)所以我给出了一个if语句来检查用户名是否是'npend', 我使用 request.user 方法来获取用户名,即使我使用 admin 访问该页面,如果我尝试打印 request.user == "npend" 的语句,我得到一个错误,它每次都打印 False。

谁能帮我解决这个问题,谢谢。

使用的代码:

def medicine_create_view(request, *args,**kwargs):
    my_form = Raw_Medicine_Form()
    if request.method == 'POST':
        my_form = Raw_Medicine_Form(request.POST)
        if my_form.is_valid():
            print(my_form.cleaned_data)
            Medicine.objects.create(**my_form.cleaned_data)
        else:
            print(my_form.errors)
    my_form = Raw_Medicine_Form()
    context ={
        "form" : my_form,
    }
    #print(request.user)
    #print(request.user=="npend") 
    if(request.user=="npend"): return render(request,"App_1/medicine_create.html",context)
    else: return render(request,"error_files/not_acessable.html",{})

Out_Put 屏幕如图所示:

False
npend
[17/Jun/2021 09:37:36] "GET /create/ HTTP/1.1" 200 227

【问题讨论】:

    标签: python django if-statement backend


    【解决方案1】:

    request.user 是一个用户对象。这就是为什么您在比较时会得到 False 值的原因。但是在打印 User 对象时,会调用 __str__ 魔术方法并将用户名打印为字符串。

    print(request.user) # string
    print(request.user=="npend") # False
    

    您可以将其与实际用户名值进行比较:

    if(request.user.username=="npend"): 
      return render(request,"App_1/medicine_create.html",context)
    

    【讨论】:

      【解决方案2】:

      request.user 是一个 User 对象。如果你打印它,它会打印用户名,但要获取用户名的值,你必须使用request.user.username

      文档会告诉您这一点。我刚刚用谷歌搜索了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多