Django REST Framework 最佳实践

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

验证策略涵盖了OAuth1aOAuth2

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

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

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

- 大公司如同MozillaEventbrite,也是忠实的使用者

 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 [email protected]: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了

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

原文地址:https://www.cnblogs.com/navysummer/p/8478512.html

时间: 2024-11-09 02:16:27

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

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

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05-17, 修改日期: 2014-05-18 在Django 1.6中的settings.py中可以修改130多项设置, 但大多数都继承自默认值. 设置是在web服务器启动时首次载入的, 服务器重启时重新载入, 因此, 程序员们应尽量避免修改正式服务器上使用的settings.py文件. 以下是一些我们

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

原文:http://www.weiguda.com/blog/38/ 如何正确的使用signal: 简单回答是: 在其他方法无法使用的情况下, 才最后考虑使用signal. 因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django项目就会变得异常复杂, 许多内容都纠结在一起无法解开. 许多开发者也会将django signal和异步消息

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

原文:http://www.weiguda.com/blog/41/ 当我们设置服务器时, 不应该每次都使用ssh登录服务器, 再按照记忆一步一步的配置. 因为这样实在是太容易忘记某些步骤了. 服务器设置应当自动化, 并写成文档. 在django用户中, Ansible, SaltStack, Puppet和Chef是最流行的四款自动化部署工具. 这些工具似乎都需要长时间学习才能使用, 因为这些工具不是为一台服务器设置的, 而是针对多台服务器的. 以下是这些工具的基本功能: 远程通过apt-ge

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

原文: http://www.weiguda.com/blog/37/ 任何参与过高要求的大型项目的编程人员都明白设置适当的log等级, 创建不同的logger, 记录重要事件的重要性. 正确的设置和使用log并不是一件容易的事, 但 对于系统的稳定性而言, logging则是必不可少的. log不仅能用来debug程序, 并能追踪影响程序表现的指标. 之前我们提到需要定期查看access和error文件, 除了记录这些外, 还需要定期查看log文件, 以保证程序安全. 本片的内容主要关于Dja

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

Model定义: class Test(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=128, unique=True, db_index=True) #create_time = models.DateTimeField(auto_now_add=True, db_index=True) #update_time = models.DateTimeField(a

OSGi原理与最佳实践:第一章 OSGi框架简介(2)

OSGi原理与最佳实践:第一章 OSGi框架简介(2) 由  ValRay 发布 已被浏览4884次 共有3条评论 已被3个人收藏 2013-08-16 21:23 顶(0) 踩(0) osgi原理与最佳实践 1.1.4 开发传统类型的应用 1.1.4.1 B/S 我们首先来看一下,如何基于 OSGi 来开发 B/S 结构的应用.B/S 结构应用程序的开发,可有两个选择:一个是在 OSGi 的框架中嵌入 Http 服务器,另外一个是在 Servlet 容器中嵌入 OSGi 框架.下面分别介绍这两

[Celery]Celery 最佳实践

orangleliu 翻译 原文点击查看 如果你的工作和 Django 相关, 并且有时候需要执行一些长时间的后台任务.可能你已经使用了某种任务队列,Celery就是Python(和Django)世界中时下解决类似问题最受欢迎的项目. 当在某些项目使用Celery作为任务队列之后,我总结了一些最佳实践,决定把它们些下来.然而,这里也有一些对自己应该做的却没做的反思,还有一些celery提供但是没有充分利用的功能. No.1 不要使用关系型数据库来作为AMQP的代理 让我来解释下我为什么觉得这是错

MySQL性能优化的21个最佳实践

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被My

Celery最佳实践(转)

原文  http://www.cnblogs.com/ajianbeyourself/p/3889017.html 作为一个Celery使用重度用户,看到 Celery Best Practices 这篇文章,干脆翻译出来,同时也会加入我们项目中celery的实战经验. 通常在使用Django的时候,你可能需要执行一些长时间的后台任务,没准你可能需要使用一些能排序的任务队列,那么Celery将会是一个非常好的选择. 当把Celery作为一个任务队列用于很多项目中后,作者积累了一些最佳实践方式,譬