避免无聊的视图和网址。

django-viewsets的Python项目详细描述


Problematic

当查看ruby on rails时,我发现了一个很好的特性 Django失踪: controllers。 与我经常读到的相反,django的观点实际上并不等同于 轨道上的控制器。rails控制器基本上是一组django 视图和Django URL模式除了赶走无聊的url工作,这个 是对属于同一模型的视图进行分组的干净方法。

任何好的djangonaut都会与泛型视图建立连接,尤其是 class-based。 这是避免重复相同代码的最简单的解决方案 变化。但这并没有简化URL模式,我们通常必须定义 此类文件:

# views.py
from django.views.generic import ListView, DetailView  # and so on…
from .models import Example


class ExampleListView(ListView):
    model = Example


class ExampleDetailView(DetailView):
    model = Example

# and so on…
# urls.py
from django.conf.urls import patterns, url
from .views import *


urlpatterns = patterns('',
    url('^examples/$', ExampleListView.as_view(), name='example_index'),
    url('^examples/(?P<pk>\d+)$', ExampleDetailView.as_view(),
        name='example_detail'),
    # and so on…
)

用一个模型,这看起来很简单复杂的应用程序包含 几十个模型,这看起来很痛苦-而且绝对不会干燥[1]

Solution

django viewsets提出了一个受Rails控制器启发的解决方案。 ViewSet是一个类,它从一组 基于类的泛型视图。它的设计是可重写的,因此它适合 标准和高级使用

Installation

[sudo] pip install django-viewsets

您不必更改项目设置。

Usage

ModelViewSet

Provided views and urls

Generic viewURLURL name
^{tt4}$your-models/your-model_index
^{tt5}$your-models/[pk]your-model_detail
^{tt6}$your-models/create/your-model_create
^{tt7}$your-models/[pk]/updateyour-model_update
^{tt8}$your-models/[pk]/deleteyour-model_delete

Basic use

在您的应用程序(或项目)中url.py

from django.conf.urls import patterns, url, include
from viewsets import ModelViewSet
from .models import YourModel

urlpatterns = patterns('',
    url('', include(ModelViewSet(YourModel).urls)),
)

您还可以提供其他basic attributes作为关键字参数为了 例如,如果要在URL模式中使用slug而不是主键, 第2行和第6行变为:

from viewsets import ModelViewSet, SLUG  # line 2
url('', include(ModelViewSet(YourModel, id_pattern=SLUG).urls)),  # line 6

Advanced use

这允许更多的定制。

在您的应用程序中views.py

from viewsets import ModelViewSet
from .models import YourModel

class YourModelViewSet(ModelViewSet):
    model = YourModel

在您的应用程序(或项目)中url.py

from django.conf.urls import patterns, url, include
from .views import YourModelViewSet

urlpatterns = patterns('',
    url('', include(YourModelViewSet().urls)),
)

有趣的是,您可以轻松地自定义视图和 网址。假设您想在更新和删除url中使用主键 模式,但您希望在详细视图中使用slug。最快的方法 是:

from viewsets import ModelViewSet, SLUG

class CustomModelViewSet(ModelViewSet):
    def __init__(self, *args, **kwargs):
        self.views['detail_view']['pattern'] = SLUG
        super(CustomModelViewSet, self).__init__(*args, **kwargs)

这里我们不设置model属性,这样CustomModelViewSet就可以 可用于任何型号当然,你现在可以使用 CustomModelViewSetbasic use以及Advanced use一起。我们 如果此视图集只用于 具体型号。

Basic Attributes

model
ModelViewSet将从中创建视图和URL的模型类这是 唯一的强制属性。
base_url_pattern
覆盖所有url模式中的模型。计算依据 model._meta.verbose_name_plural如果未设置。
base_url_name
覆盖所有URL名称中的模型计算依据 model._meta.verbose_name如果未设置。
id_pattern
覆盖所有url模式中的[pk]。您可以使用viewsets.PKviewsets.SLUG.
excluded_views
来自views的键序列默认不设置。 示例:('create_view', 'delete_view',).
namespace
如果应用程序具有url命名空间,请设置此项。它用于重定向 删除视图中的main_view您还可以设置main_url
main_view
用于计算main_url'list_view'默认。
main_url
删除视图重定向的主url如果已设置,main_view将被忽略。

Advanced attributes

views
定义视图和url的字典。默认情况下,crud[2]
[1]Don’t Repeat Yourself
[2]Create Read Update Delete

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将数据从一个输入流传输到多个输出流的最佳方式   java如何使用反射机制调用驻留在具有默认可见性的基类中的公共方法?   在Java中将两个不同的方法调用为一个方法   集合的最佳Java线程安全锁定机制?   java在gae中存储json字符串   PHP/Java桥。如何从php服务器连接到桌面应用程序   java Spring:无法持久化用@JsonIgnore注释的实体   基准测试中的java非确定性分配行为   JavaSpring:使用Spring安全性为执行器端点配置安全性   java扩展spring应用程序上下文的最佳方式是什么?   在Mac OS上使用Java向终端窗口发送一些输入   java addInputStream(InputStream InputStream)方法失败   java为什么下面的代码打印为false?   java错误:类按钮中的addActionListener方法无法应用于给定类型;   java在spring数据jpa投影中使用嵌入式值对象   java访问匿名内部类中的变量的干净方法是什么?   java将POJO转换为JSON只返回“id”字段   jvm热点我在哪里可以找到MemoryConsumer。测试内存消耗的java程序?