Python 在类基视图中的何处放置逻辑?
我想了解在类基视图中,我将在何处执行以下逻辑: 基本上,我想检查用户是否有帐户,如果是这样的话,将它们转发到URL A,或者URL B。但是,我不能100%确定get_success_URL()是否是CBV中的最佳位置,或者Django是否有适合此用例的东西。我见过其他CBV,但我尝试过,但失去了范围。请记住,我需要传递用户id 到目前为止,我已经做到了这一点:Python 在类基视图中的何处放置逻辑?,python,django,Python,Django,我想了解在类基视图中,我将在何处执行以下逻辑: 基本上,我想检查用户是否有帐户,如果是这样的话,将它们转发到URL A,或者URL B。但是,我不能100%确定get_success_URL()是否是CBV中的最佳位置,或者Django是否有适合此用例的东西。我见过其他CBV,但我尝试过,但失去了范围。请记住,我需要传递用户id 到目前为止,我已经做到了这一点: class CampaignView(BaseUpdateView): form_class = UserLookUpFro
class CampaignView(BaseUpdateView):
form_class = UserLookUpFrom
model = Campaign
def get_context_data(self, **kwargs):
context = super(CampaignView, self).get_context_data(**kwargs)
# context['form'] = AppUserLookUpFrom
return context
def form_valid(self, form):
"""
If the form is valid, in this case DON'T save it!
"""
return super(CampaignView, self).form_valid(form)
def get_success_url(self):
"""
Returns the supplied URL.
"""
if self.success_url:
url = self.success_url % self.object.__dict__
else:
try:
currect_user = Campaign.object.get_user_by_email(EMAIL HERE DONT KNOW HOW TO GET THIS YET FROM FORM)
if currect_user:
url = reverse('campaigns_login', args=(self.object.id,'self.userid'))
else:
url = reverse('campaigns_register', args=(self.object.id)
except AttributeError:
raise ImproperlyConfigured(
"No URL to redirect to. Either provide a url or define"
" a get_absolute_url method on the Model.")
return url
您可以在
表单中执行此操作。下面是一段未经测试的代码,可以帮助解释这一概念:
from django.shortcuts import redirect
def form_valid(self, form):
email = form.cleaned_data.get("email", "")
prev_user = Campaign.object.filter(email=email)
if prev_user:
return redirect('campaigns_login', self.object.id, prev_user[0].userid)
else:
return redirect('campaigns_register', self.object.id)
我认为应该放在竞选观点的帖子上:
def post(self, request, *args, **kwargs):
form= self.form_class(request.POST)
if form.is_valid():
user_email= form.cleaned_data['email']
user_of_campaign= Campaign.objects.filter(email= user_email)
if len(user_of_campaign)>0:
return redirect('/login', user_of_campaign[0].id)
else:
return redirect('/register')
return super(CampaignView, self).form_valid(form)
return super(CampaignView, self).form_invalid(form)
嗨,谢谢你。你能解释一下最后两次的回程吗?我不知道第二个如何工作。第二个是,如果表单无效,那么用户将返回到初始表单页面。