在与1.2版本的短暂会面之后我回到Django,现在在版本1.3中,受欢迎的视图方法似乎是使用类.
牢记代码风格,可维护性和模块性:何时应该使用类,何时使用函数?我应该总是从泛型类视图扩展(使用TemplateView似乎没有任何害处),还是应该使用我自己的视图可调用对象?
提前致谢.
我发现基于类的视图有助于保持我的代码可读和简化.
例如,从表单文档中获取示例(基于函数)视图:
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render_to_response('contact.html', {
'form': form,
})
Run Code Online (Sandbox Code Playgroud)
在基于类的等价物中,样板代码和令人讨厌的嵌套ifs消失:
class Contact(FormView):
template_name = 'contact.html'
form_class = ContactForm
success_url = '/thanks/'
def form_valid(self, form):
# Process the data in form.cleaned_data
return super(Contact, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
此外,虽然您总是可以混合和匹配基于函数和基于类的视图,但我发现在同一个Django应用程序中混合样式往往看起来非常混乱.因此,一旦我有一些真正受益于基于类的观点,这是一个很容易的步骤来切换所有批次.
我认为有两种情况需要基于类(通用)视图:
对于其他任何事情,请使用您感觉最舒服的东西。正如您所说,您基本上可以很好地扩展TemplateView和覆盖相应的方法,尽管您也可以使用基于函数的方法(并且必须自己处理渲染模板调用)。这最终取决于你。
编辑:基于类的视图的另一个优点是,它可以让您以request.method更清晰的方式分离代码,甚至405 Method Not Allowed在使用错误的方法时返回响应代码。因此,您根本不必处理像if request.method=='POST'orif request.method=='GET'这样的行,只需扩展postorget方法即可。
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |