Django REST Framework(一) 初步使用

来源:互联网 发布:中国是否允许持枪知乎 编辑:程序博客网 时间:2024/05/29 02:22

介绍

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 install djangorestframework将 'rest_framework' 添加到你的 'INSTALLED_APPS' 设置里INSTALLED_APPS = (    ...    'rest_framework',)如果你需要使用可视化的API,你也许就需要添加REST Framework的登陆/登出视图。在项目的 urls.py文件里,添加下面的内容:urlpatterns = [    ...    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))]

3. 示例

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

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

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

REST_FRAMEWORK = {    # 使用Django的标准`django.contrib.auth`权限管理类,    # 或者为尚未认证的用户,赋予只读权限.    'DEFAULT_PERMISSION_CLASSES': [        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'    ]}
这是项目目录下urls.py模块:from django.conf.urls import url, includefrom django.contrib.auth.models import Userfrom rest_framework import routers, serializers, viewsets# Serializers定义了API的表现.class UserSerializer(serializers.ModelSerializer):    class Meta:        model = User        fields = ('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了使用右上角的登陆控制,可以对系统用户进行新增和删除操作

上面的是官网中的 把所有的都写在了urls中 下面的是自己的分开写的方法

在app下创建一个serializers.py 文件 主要就是来写 需要写序列化的model的

from django.contrib.auth.models import Userfrom .models import UserProfile, Contentfrom rest_framework import serializers# Serializers定义了API的表现形式.class UserSerializer(serializers.ModelSerializer):  # 使用ModelSerializer 来序列化model层    """序列化user模型"""    class Meta:        model = User  # 指定要序列化的模型        fields = ('username', 'email', 'is_staff')  # 指定要序列化的字段class UserProfileSerializer(serializers.ModelSerializer):    """序列化userprofile 模型"""    class Meta:        model = UserProfile        fields = ('age', 'image')class ContentSerializer(serializers.ModelSerializer):    """content 模型"""    class Meta:        model = Content        fields = ('name', 'age', 'image')

在app下创建一个restful_views.py 文件 主要就是用来存放视图类的

一个视图类对应了一个序列化的modelfrom rest_framework import viewsetsfrom .serializers import UserSerializer, UserProfileSerializer, ContentSerializerfrom django.contrib.auth.models import Userfrom .models import UserProfile, Content# ViewSets 定义了 视图(view) 的行为.class UserViewSet(viewsets.ModelViewSet):    queryset = User.objects.all()  # 把数据取出来 交给 制定的序列化对象去序列化数据    serializer_class = UserSerializerclass UserProfileViewSet(viewsets.ModelViewSet):    queryset = UserProfile.objects.all()    serializer_class = UserProfileSerializerclass ContentViewSet(viewsets.ModelViewSet):    queryset = Content.objects.all()    serializer_class = ContentSerializer

在app下创建一个restful_urls.py 文件 主要就是用来存放url映射的

from django.conf.urls import include, urlfrom rest_framework import routersfrom .restful_views import UserViewSet, UserProfileViewSet, ContentViewSet# Routers 提供了一种简单途径,自动地配置了URL。router = routers.DefaultRouter()  # 创建router实例router.register(r'users', UserViewSet)  # 注册一个url 然后对应上我们自己写的类视图函数router.register(r'profile', UserProfileViewSet)  router.register(r'content', ContentViewSet)  # 使用自动的URL路由,让我们的API跑起来。# 此外,我们也包括了登入可视化API的URLs。urlpatterns = [    url(r'^', include(router.urls)), # django封装了自己的url    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))  # 用于前端的用户认证]

在把自定义的restful_urls 和app下面的urls进行关联 这样django能知道restful_urls的位置

from django.conf.urls import url, includefrom restful import viewsurlpatterns = [    # url(r'^restful', views.index, name='restful'),    url(r'^api/', include('restful.rest_urls', namespace='api')),]
原创粉丝点击