体验Django REST framework,解读REST架构风格

Troubles 发表于 2019-1-29 14:55:35
因为项目中使用了REST API,所以对REST架构风格做了一些研究。如果有对REST架构风格还不了解,或者一知半解的朋友,可以读读我的另一篇文章《那些年,我们一起误解过的REST》。
一开始在项目中使用的是OpenResty来实现REST API,但使用起来一直觉得不方便。主要是因为Lua没有ORM,也没有REST架构风格的框架。直到最近在用Django时,接触到Django REST framework,在深感便利的同时,也进一步加深了对REST架构风格的理解。所以写下这篇文章,一方面记录Django REST framework的体验过程,同时借此解读下REST架构风格。
1. 体验Django REST framework1.1 安装pip install djangopip install djangorestframework1.2 创建Django项目并初始化django-admin startproject rest_example  # 创建Django项目django-admin.py startapp app    # 创建应用python manage.py migrate    # 执行迁移python manage.py createsuperuser --email admin@example.com --username admin # 创建超级用户1.3 项目配置
在项目INSTALL_APP配置中加入rest_framework,修改rest_example/settings.py。
INSTALLED_APPS = (    ...    'rest_framework',)1.4 REST framework配置
在项目配置中加入REST_FRAMEWORK配置,在rest_example/settings.py加入以下内容。
REST_FRAMEWORK = {    # Use Django's standard `django.contrib.auth` permissions,    # or allow read-only access for unauthenticated users.    'DEFAULT_PERMISSION_CLASSES': [        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'    }1.5 创建序列化器
创建rest_example/app/serializers.py文件,内容如下。
from django.contrib.auth.models import User, Groupfrom rest_framework import serializersclass UserSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = User        fields = ('url', 'username', 'email', 'groups')class GroupSerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = Group        fields = ('url', 'name')
序列化器会自动将模型序列化。对于RESTful架构来说,超链模型序列化器是非常合适的,因为可以提供连通性。
1.6 创建视图
修改rest_example/app/views文件,内容如下。
from django.contrib.auth.models import User, Groupfrom rest_framework import viewsetsfrom rest_example.app.serializers import UserSerializer, GroupSerializerclass UserViewSet(viewsets.ModelViewSet):    """    API endpoint that allows users to be viewed or edited.    """    queryset = User.objects.all().order_by('-date_joined')    serializer_class = UserSerializerclass GroupViewSet(viewsets.ModelViewSet):    """    API endpoint that allows groups to be viewed or edited.    """    queryset = Group.objects.all()    serializer_class = GroupSerializer

回复

使用道具 举报

快速回复 返回顶部 返回列表