My favorites | Sign in
Project Logo
                
Code license: New BSD License
Labels: django, crud, rest, json, xml
Show all Featured downloads:
resource.tar.gz
People details
Project owners:
  tensiongyb

Introduction

It is an enhancement of django-crudapi project at first, but by now it has become an independent app.

介绍

一个 django 通用 crud 操作的实现,开始设计时参考了 django-crudapi

实现的特性:

对应的 url 设置如下:
(r'^(?P<key>api)/', include('apps.resource.urls')),
支持不固定的参数,可以在 GET 时添加搜索条件,如:
  • GET /api/app/model/?name=some_name&id__lt=3 会返回 name 为 some_name 且 id < 3 的记录。
可以在 update 之前做一些额外的事情,将 update_user 设置为当前用户,将修改时间设置为当前时间等。类似的钩子还有 before_create, before_get_list 和 before_read。

用法

resource 是一个django app,可以直接放入你的 app 目录下,并在 settings 中添加对应 INSTALLED_APPS 配置。最后在你的 urls.py 中 include resource 目录下的 urls.py 即可(推荐),例如:urls.py

# -*- coding: utf-8 -*-
from django.conf.urls.defaults import *
from django.db import models
from apps.resource import register
from apps.resource.Resource import Resource


# 可以通过继承来覆盖默认方法
class MyResource(Resource):
    cannot_see_fields = ['id', 'passwd']


# 这里注册了所有 model, 正式项目中应该有选择的进行注册
for model in models.get_models():
    register('api', model, Resource)
    # 支持一个 model 多个 api
    register('another_api', model, MyResource)


urlpatterns = patterns('',
    (r'^$', 'django.views.generic.simple.direct_to_template',
            {'template': 'index.html'}),
    (r'^admin/', include('django.contrib.admin.urls')),
    (r'^(?P<key>api)/', include('apps.resource.urls')),
    (r'^(?P<key>another_api)/', include('apps.resource.urls')),
)

url中应该有个名为 key 参数。

样例

一个可运行的简单的 project









Hosted by Google Code