gpt4 book ai didi

python - Django 功能 View VS 类 RedirectView。如何使类 View 接受参数

转载 作者:行者123 更新时间:2023-12-01 09:05:03 26 4
gpt4 key购买 nike

作为 View 的函数知道问题,但类不知道(args,kwargs来自url,空,post方法只有选择,但没有问题)。两者都有效,但为了添加检查,我想知道如何在类里面提出问题。它的 init 或 get_redirect_url 或 request 里面没有像 Question_id 这样的内容

url.py

from django.urls import path
from . import views
app_name = 'polls'
ulrpatterns=[
path('<int:question_id>/vote/', views.vote, name='vote'),
path('<int:pk>/vote0/', views.vote0.as_view(), name='vote0'),
]

View .py

class vote0(generic.base.RedirectView):
pattern_name = 'polls:results'
def get_redirect_url(self, *args, **kwargs):
selected_choice = get_object_or_404(Choice, pk(self.request.POST['choice']))
selected_choice.votes +=1
selected_choice.save()
return super().get_redirect_url(*args, **kwargs)


def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
selected_choice = question.choice_set.get(pk=request.POST['choice'])
selected_choice.votes += 1
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

最佳答案

get_redirect_urlnamed URL 参数(**kwargs)一起提供,因此您可以重写签名来捕获这些参数。例如:

class vote0(generic.base.RedirectView):
pattern_name = 'polls:results'

def get_redirect_url(self, *args<b>, question_id=None</b>, **kwargs):
question = get_object_or_404(Question<b>, pk=question_id</b>)
selected_choice = question.choice_set.get(pk=request.POST['choice'])
selected_choice.votes +=1
selected_choice.save()
return super().get_redirect_url(*args, **kwargs)

或者您可以访问 self.args 中的位置 URL 参数,以及 self.kwargs 中的命名 URL 参数> 也是如此。

背景

如果我们看一下"derived"实现中,我们看到如果我们构造一个 RedirectView 只是作为一个普通 View ,它看起来像:

class RedirectView(View):

# ...

def get(self, request, *args, **kwargs):
url = self.get_redirect_url(**kwargs)
if url:
if self.permanent:
return http.HttpResponsePermanentRedirect(url)
else:
return http.HttpResponseRedirect(url)
else:
logger.warning('Gone: %s', self.request.path,
extra={
'status_code': 410,
'request': self.request
})
return http.HttpResponseGone()

def post(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)

调度程序因此将调用post(它简单地包装get),或直接调用getget(..) 函数将进行调用并传递 **kwargs 参数。

关于python - Django 功能 View VS 类 RedirectView。如何使类 View 接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52132513/

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