我是django的新手,我正在检查一些我不理解的代码。我查看了django源代码,试图找出Django的类UserCreationFrom
(粘贴在下面)是否为您处理POST的逻辑,或者是否在其他地方实现了这一点。
为了澄清,我一直看到一个用于呈现表单的类,然后是某种类型的视图来验证数据。它通常是这样的:
表格类别:
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ("first_name", "last_name")
浏览次数:
def update_profile(request):
if request.method == "POST":
user_form = UserForm(request.POST, instance=request.user)
if user_form.is_valid():
user_form.save()
return redirect("somewhere")
else:
user_form = UserForm(instance=request.user)
return render(request, "profile.html", {"user_form":user_form})
这种实现是有意义的。
我不明白的是,当有一个呈现表单的视图,但表单本身处理验证并省略了if request.method == "POST"
逻辑时,如上所示。或者这是在什么家长课上?这两个中的任何一个也符合django约定吗?
举个例子:
类视图:
class UserSignupView(CreateView):
model = CustomUser
form_class = UserProfileSignupForm
template_name = 'signup_form.html'
def get_context_data(self, **kwargs):
kwargs['is_confused'] = True
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('somewhere')
那么形式及其逻辑将是这样的:
class UserSignUpForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
def save(self):
user = super().save(commit=False)
user.is_confused = True
user.save()
return user
任何建议和澄清都非常感谢。
就像我说的,我已经看过django文档了,但还是找不到。我想我错过了一些基本的东西,或者我的代码没有在这里呈现完整的故事。为了澄清以下形式是为了同一件事,尽管它们不是为了同一目的。我从一个模型/应用程序中得到一个,另一个来自另一个。我假设可以稍微修改一下,并在需要此功能的任何地方使用。
1条答案
按热度按时间jrcvhitl1#
一般来说,Django Form不处理GET与POST逻辑,这通常由视图处理。
用户表单由auth视图中的login/logout视图处理。
您可以用途:
将所有身份验证视图包含在其标准位置中,或者您可以将各个视图添加到urls.py(例如LoginView和朋友)以进行更细粒度的控制。
这些基于类的视图继承自generic form handling class based view和/或generic editing views。
最终,基于类的视图的工作方式是,它们实际上只是普通的基于函数的视图,但它们被实现为一个类,提供了一些公共逻辑和一些钩子函数,您可以重写这些钩子函数以自定义通用行为。