request.user在Django中究竟返回什么,我们可以将其与字符串进行比较吗?

2024-09-28 22:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,正在尝试一些东西。如果普通用户访问“\create”页面(调用名为medicine\u create\u view的函数),我想返回一个名为“in\u accessible.html”的页面, else medicine_create.html

admin的名称是“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",{})

输出屏幕如图所示:

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

Tags: formrawifrequestmyhtmlcreate页面
2条回答

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

文件会告诉你这一点。我只是用谷歌搜索了一下

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

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

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

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

相关问题 更多 >