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



我正在为管理员构建一个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)

您的CRUD操作似乎非常简单,因此在本例中,请尝试使用Django的基于类的泛型视图。

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

Django的通用视图是根据某些常见的习惯用法和视图开发中发现的模式,并对其进行抽象,以便您可以快速编写通用的数据视图,而不必写太多密码

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

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

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

然后您就可以创建它的形式,并拥有一个设计良好的代码库。

基于类的视图就是答案。具有基于类的视图:

from django.views.generic.edit import (CreateView, DeleteView, UpdateView)
class MyView(CreateView):
model = MyModel

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

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

如果您真正需要的只是django模型的crud接口,那么您还可以使用django.contrib.admin应用程序,它正是为此而设计的。只需授予用户只管理他们需要的对象的权限。

请参阅https://docs.djangoproject.com/en/1.9/ref/contrib/admin/

最新更新