Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs。 
为什么要使用REST framework? 
- 在线可视的API,对于赢得你的开发者们十分有用

- 验证策略涵盖了OAuth1a和OAuth2

- 同时支持ORM和非ORM数据源的序列化

- 可以配置各个环节,若无需更多强大的特性,使用一般基于方法(function-based)的视图(views)即可

- 大量的文档,强力的社区支持

- 大公司如同Mozilla和Eventbrite,也是忠实的使用者

 1.  配置要求

REST framework 有以下的要求:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.7+, 1.8, 1.9, 1.11)

下面是可选的包:

  • Markdown (2.1.0+) - Markdown为可视化 API 提供了支持.
  • django-filter (0.9.2+) - 过滤支持.
  • django-crispy-forms - 为过滤,提供了改良的HTML呈现.
  • django-guardian (1.1.1+) - 对象层面的权限支持.

 2.  安装部署

使用pip安装框架及所有的你需要的可选依赖包

1
2
3
pip  install  -i  https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com djangorestframework
pip  install  -i  https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com markdown
pip  install  -i  https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com django-filter

…又或者从github上clone该项目

1
git clone git@github.com:tomchristie/django-rest-framework.git

将 'rest_framework' 添加到你的 'INSTALLED_APPS' 设置里

1
2
3
4
INSTALLED_APPS = (
    ...
    'rest_framework',
)

如果你需要使用可视化的API,你也许就需要添加REST Framework的登陆/登出视图。在项目的 urls.py文件里,添加下面的内容:

1
2
3
4
urlpatterns = [
    ...
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
] 

3.  示例

让我们看一个简单用例:如何用REST framework 来搭建一个简单的支持modle的API

我们将创建一个读/写API,来处理我们项目中的用户信息。 
任何REST framework的全局设置,都存放在一个配置字典(dictionary,有些语言如Java中的map)中,名为REST_FRAMEWORK。

我们从以下的操作开始,把下面的内容添加到项目的settings.py模块中:

1
2
3
4
5
6
7
REST_FRAMEWORK = {
    # 使用Django的标准`django.contrib.auth`权限管理类,
    # 或者为尚未认证的用户,赋予只读权限.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

这是项目目录下urls.py模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django.conf.urls import url, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
 
# Serializers定义了API的表现.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'is_staff')
 
# ViewSets 定义了 视图(view) 的行为.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
 
# Routers 提供了一种简单途径,自动地配置了URL。
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
 
# 使用自动的URL路由,让我们的API跑起来。
# 此外,我们也包括了登入可视化API的URLs。
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

启动项目 python manage runserver 8000 浏览器 http://127.0.0.1:8000/里,打开新建的’users’ API了

使用右上角的登陆控制,可以对系统用户进行新增和删除操作

Django REST Framework 最佳实践的更多相关文章

  1. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  2. django 强制登录最佳实践

    参考: https://python-programming.courses/recipes/django-require-authentication-pages/ 即通过中间件来做AOP拦截.不用 ...

  3. 【Python】Django 时间字段 最佳实践

    . python datetime from datetime import datetime datetime.now() datetime.utcnow() from datetime impor ...

  4. Django 1.6 最佳实践: 如何设置和使用 Log(转)

    原文: http://www.weiguda.com/blog/37/ 任何参与过高要求的大型项目的编程人员都明白设置适当的log等级, 创建不同的logger, 记录重要事件的重要性. 正确的设置和 ...

  5. Django 1.6 最佳实践: 如何正确使用 Signal(转)

    原文:http://www.weiguda.com/blog/38/ 如何正确的使用signal: 简单回答是: 在其他方法无法使用的情况下, 才最后考虑使用signal. 因为新的django开发人 ...

  6. Django 1.6 最佳实践: django项目的服务器自动化部署(转)

    原文:http://www.weiguda.com/blog/41/ 当我们设置服务器时, 不应该每次都使用ssh登录服务器, 再按照记忆一步一步的配置. 因为这样实在是太容易忘记某些步骤了. 服务器 ...

  7. Django最佳实践(中文版)

    这是一份关于开发和部署 Django Web 框架 的动态文档 (会随时更新). 这些准则不应该被认为是 绝对正确 或 唯一 使用 Django 的方法, 应该说这些最佳实践是我们使用框架多年来积累的 ...

  8. Django 最佳实践

    不错的Django实践规范,转自Github: https://github.com/brantyoung/zh-django-best-practices/blob/master/readme.rs ...

  9. 基于django rest framework的mock server实践

    网上找了一下mock server的实现,发现python的基本都是基于flask来实现的,因最近在学django,就尝试用drf实现了下: A brief introduction of sui_m ...

随机推荐

  1. Python系列之 - 反射

    一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...

  2. TSQL:A表字段与B表中的关联,关联条件中一列是随机关联的实现方式

    A表字段与B表中的关联,关联条件中一列是随机关联的实现方式 create table test( rsrp string, rsrq string, tkey string, distan strin ...

  3. Struts(九):值栈(OGNL)

    引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...

  4. Unity中的基础光照

    渲染包含了两大部分:决定一个像素的可见性,决定这个像素上的光照计算. 光照模型就是用于决定在一个像素上进行怎样的光照计算. 一.光源 在实时渲染中我们通常把光源当做一个没有体积的点. 1.1 辐照度 ...

  5. mvc4.0 @Styles.Render(转)

    1.@Styles.Render 在页面上可以用@Styles.Render("~/Content/css") 来加载css 首先要在App_Start 里面BundleConfi ...

  6. Vue练手项目(包含typescript版本)

    本项目的git仓库https://github.com/lznism/xiachufang-vue 对应的使用typescript实现的版本地址https://github.com/lznism/xi ...

  7. 属性添加get和set方法

    出错信息: Struts Problem Report Struts has detected an unhandled exception: Messages: File: com/myHibern ...

  8. 计蒜客模拟赛5 D2T2 蚂蚁搬家

    很久很久以前,有很多蚂蚁部落共同生活在一片祥和的村庄里.但在某一天,村庄里突然出现了一只食蚁兽,蚂蚁们为了保全性命而决定搬家. 然而这个村庄四面环山,想要离开这个村庄必须要从地洞里离开,村子里一共有 ...

  9. [BZOJ]1063 道路设计(Noi2008)

    省选一试后的第一篇blog! Description Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代,公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z ...

  10. 【Gcd】

    [题目描述] 有 n 个正整数 x1~xn,初始时状态均为未选.有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对. [输入数据 ...