为CRUD操作设计django表单的最佳实践

时间:2016-06-07 02:59:03

标签: python django crud

我正在为admin构建一个django Web应用程序,主要涉及CRUD(创建,读取,更新和删除)操作。 我需要建议/最佳实践来设计表格。我是django和python的新手,需要专家的建议。 目前我在视图中创建了不同的方法,如

def create(request):
    --logic to add
     return HttpResponseRedirect('/createproduct')

def delete(request,obj_id):                
    result=products.objects.get(product_type=object_id).delete()                              
    return HttpResponseRedirect('/listobjects/')

def getObjects(request):
    products= products.objects.order_by('product_type')
    return render(request,'getProducts.html',
                {'results': products})

和我的urls.py如下所示

url(r'^createproduct/$',create),
url(r'^listobjects/',getObjects),
url(r'^deleteproduct/(?P<object_id>\d+)/$',delete)

3 个答案:

答案 0 :(得分:3)

你的CRUD操作看起来非常简单,所以在这种情况下尝试使用Django的Class Based Generic Views

正如文档所述,这是他们创建的目的之一:

  

Django的通用观点是根据某些常见的习语而制定的   在视图开发中找到的模式并将它们抽象出来以便您可以   快速编写数据的通用视图,而无需编写太多内容   代码。

     

我们可以识别某些常见任务,例如显示列表   对象,并编写显示任何对象列表的代码。那么   有问题的模型可以作为URLconf的额外参数传递。

Django附带通用视图以执行以下操作:

  • 显示单个对象的列表和详细信息页面。
  • 在年/月/日存档页面,相关详细信息和“最新”页面中显示基于日期的对象。
  • 允许用户创建,更新和删除对象 - 无论是否经过授权。

然后,您可以创建其forms并拥有精心设计的代码库。

答案 1 :(得分:1)

基于类的视图就是答案。使用基于类的视图:

from django.views.generic.edit import (CreateView, DeleteView, UpdateView)

class MyView(CreateView):
    model = MyModel

足以为您提供工作视图。用UpdateView和DeleteView替换CreateView。这为您提供模型中的所有验证并自动保存数据。您可以使用列表视图列出数据。您可以覆盖视图中的方法以更改所需的任何内容。通过这种方式,您无法授予非管理员访问管理界面的权限。保留管理员的管理界面。你不应该在其中构建整个网站。

此外,不使用函数作为视图,而是使用TemplateView而不是django.views.generic。它使您的代码更清洁。您可以将post与get分开,并将实例方法绑定到您的视图。

答案 2 :(得分:0)

如果你需要的只是django模型的crud接口,你也可以使用专为此目的而设计的django.contrib.admin应用程序。只需授予用户管理权限,只需管理他们需要的对象。

请参阅{{3}}