request.user return 在 django 中究竟是什么,我们可以将它与字符串进行比较吗?

what exactly does request.user return in django, can we compare it with a string?

我是 Django 的新手,正在尝试一些东西。如果普通用户访问“\create”页面(调用名为 medicine_create_view 的函数),我想 return 一个名为“in_accessable.html”的页面, 否则 medicine_create.html.

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

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

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

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)