简介
官网地址: https://www.django-rest-framework.org/
Django Rest Framework是一个开源的,由合作资助的项目。如果在商业上使用REST框架, 建议 注册付费计划 ,使之可以持续开发,健康发展。
Django Rest Framework是一个强大且灵活的工具包,主要用以构建RESTful风格的Web API。
Django REST Framework(以后简称DRF)可以在Django的基础上迅速实现API,并且自身还带有 基于WEB的测试和浏览页面,可以方便的测试自己的API。DRF几乎是Django生态中进行前后端 分离开发的默认库。
Django REST Framework具有以下功能和特性:
- 自带基于Web的可浏览的API,对于开发者非常有帮助
- 支持OAuth1a 和OAuth2认证策略
- 支持ORM或非ORM数据源的序列化
- 高可自定制性,多种视图类型可选
- 自动生成符合 RESTful 规范的 API
- 支持 OPTION、HEAD、POST、GET、PATCH、PUT、DELETE等HTTP方法
- 根据 Content-Type 来动态的返回数据类型(如HTML、json)
- 细粒度的权限管理(可到对象级别)
- 丰富的文档和强大的社区支持
- Mozilla、Red Hat、 Heroku和Eventbrite等知名公司正在使用
安装依赖
当前时间2021年01月,DRF版本3.12.2,依赖及支持如下:
- Python (3.5, 3.6, 3.7, 3.8, 3.9)
- Django (2.2, 3.0, 3.1)
强烈建议并仅正式支持每个Python和Django系列的最新修补程序版本。
以下软件包是可选的:
- PyYAML,uritemplate(5.1+,3.0.0+)-模式生成支持。
- Markdown(3.0.0+)-对可浏览API的Markdown支持。
- Pygments(2.4.0+)-在Markdown处理中添加语法突出显示。
- django-filter(1.0.1+)-过滤支持。
- django-guardian(1.1.1+)-对象级别权限支持。
安装方法
使用安装pip
,包括所需的任何可选软件包...
pip install djangorestframework
pip install markdown # Markdown support for the browsable API. markdown插件 可选
pip install django-filter # 过滤插件 可选
或者通过git下载:
git clone https://github.com/encode/django-rest-framework
安装完毕,在项目配置文件中,注册app:
INSTALLED_APPS = (
...
'rest_framework',
)
如果你想使用基于浏览器的可视化的API目录,并且希望获得一个登录登出功能,那么可以在根 路由下添加下面的路由,这个功能类似Django自带的admin后台:
urlpatterns = [
...
path('api-auth/', include('rest_framework.urls'))
]
请注意,URL路径可以是您想要的任何路径。
为了登录操作,也许你还要生成数据表,创建超级用户。这个步骤可选:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
简单的使用
在项目的根路由urls.py文件中,写入下面的代码:
from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'is_staff']
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
这个简单,又高度集成的例子,实际上是把DRF的序列化器、视图集、路由类和路由表都写在 一个文件里了。真实情况下肯定不能这么做。
启动开发服务器,访问 127.0.0.1:8000/users/ ,查看效果吧。