gpt4 book ai didi

python - “函数”对象在 Django 中没有属性 'get'

转载 作者:行者123 更新时间:2023-12-04 09:23:35 24 4
gpt4 key购买 nike

我试图让用户只有在登录时才能提出问题。
这是我在终端窗口中遇到的错误:

    Internal Server Error: /ask_question/
Traceback (most recent call last):
File "/home/rayan/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/rayan/.local/lib/python3.8/site-packages/django/utils/deprecation.py", line 96, in __call__
response = self.process_response(request, response)
File "/home/rayan/.local/lib/python3.8/site-packages/django/middleware/clickjacking.py", line 26, in process_response
if response.get('X-Frame-Options') is not None:
AttributeError: 'function' object has no attribute 'get'
[23/Jul/2020 17:19:16] "GET /ask_question/ HTTP/1.1" 500 62327
我正在使用装饰器,这是我的decorators.py 中的代码:
def usersOnly(view_func):
def func(request, *args, **kwargs):
if request.user.is_authenticated:
return view_func
else:
return redirect('login')
return func
这是我的 views.py 中的代码:
@usersOnly
def ask_question(request):
form = AskQuestion()
if request.method == "POST":
asker = request.user
form = AskQuestion(request.POST)
if form.is_valid():
form.save()
id = form.cleaned_data.get('id')
return redirect(f'/question/{id}/')
dic = {
"form":form,
}
return render(request, 'blogs/ask_question.html', dic)
这是我的models.py中的代码:
class Question(models.Model):
title = models.CharField(max_length=250)
asker = models.ForeignKey(User,on_delete=models.CASCADE)
text = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
我试图只允许登录的用户提问,如果用户未登录,他将被重定向到登录页面。但它给了我一个错误。

最佳答案

您需要在装饰器中调用函数,并返回函数的结果,而不是函数本身:

def usersOnly(view_func):
def func(request, *args, **kwargs):
if request.user.is_authenticated:
return view_func(request, *args, **kwargs)
else:
return redirect('login')
return func
但是你在这里想要做的,已经存在了。您可以使用 @login_required decorator [Django-doc] :
from django.contrib.auth.decorators import login_required
from django.urls import reverse_lazy

@login_required(login_url=reverse_lazy('login'))
def ask_question(request):
# …

关于python - “函数”对象在 Django 中没有属性 'get',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63060117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com