安装配置相关
1、安装
pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support
2、注册到app
INSTALLED_APPS = ( ... 'rest_framework', )
3、配置可视化api
urlpatterns = [ ... url(r'^api-auth/', include('rest_framework.urls')) ]
4、简单应用
1、先创建一个模型
class Role(models.Model): """ 角色表 """ title = models.CharField(max_length=32, verbose_name="角色名称") class Meta: verbose_name = "角色表" verbose_name_plural = "角色表" def __str__(self): return self.title class User(models.Model): """ 用户表 """ id = models.AutoField(primary_key=True) username = models.CharField(max_length=32, verbose_name="用户名") password = models.CharField(max_length=128, verbose_name="密码") email = models.CharField(max_length=32, verbose_name="邮箱") roles = models.ManyToManyField(to="Role", blank=True, verbose_name="用户关联的角色") class Meta: verbose_name = "用户表" verbose_name_plural = "用户表" def __str__(self): return self.username
2、Serializers(序列化器)
序列化数据,在models.py 同级目录下新建一个serializers.py
from rest_framework import serializers
# HyperlinkedModelSerializer 会自动生成一个 url 字段来表示超链接
class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User
fields = ('url', 'username', 'email', 'roles')
#fields = “all”
class RoleSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Role fields = ('title', 'permissions')
3、Views
开始写视图函数
from rest_framework import viewsets from .serializers import UserSerializer,RoleSerializer class UserViewSet(viewsets.ModelViewSet): """ 允许用户查看或编辑的API路径。 """ queryset = User.objects.all() serializer_class = UserSerializer class RoleViewSet(viewsets.ModelViewSet): """ 允许角色查看或编辑的API路径。 """ queryset = Role.objects.all() serializer_class = RoleSerializer
3、URLs
配置路由
from rest_framework import routers
from rest_framework.documentation import include_docs_urls
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'roles', views.RoleViewSet)
urlpatterns = [
path('api/rbac/', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
path('docs/', include_docs_urls(title="rest_frameworkc api")),
]