Restful API官方文档
理解Restful架构:http://www.ruanyifeng.com/blog/2011/09/restful
RESTful设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
Django REST framework文档:http://www.django-rest-framework.org/#installation
Django RESTful 中文翻译:http://blog.csdn.net/ppppfly/article/category/6170709
基于Django的RESTful安装
第一步:使用pip安装:
1 2 | pip3 install djangorestframework pip3 install djangorestframework - i http: / / pipy.douban.com / simple #豆瓣源 |
第二步:添加rest_framework
到settings中的INSTALLED_APPS
中:
1 | 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' )) ] |
注意:URL路径可以任意编写,但你必须include 'rest_framework.urls'
,且使用'rest_framework'
这个namespace(命名空间)。如果你的Django是1.9+版本,你也可以不写namespace
,REST framework会帮你自动设置。
例子
让我们看一个简单用例:如何用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' ] } |
别忘了,确保你已经将 rest_framework 添加到你的INSTALLED_APPS中。
现在我们已做好准备,来创建我们的API了。这是我们的项目根下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' )) ] |
现在你可以在浏览器的http://127.0.0.1:8000/里,打开你新建的’users’ API了。使用右上角的登陆控制,可以对系统用户进行新增和删除操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from django.conf.urls import url, include #从已存在的assets项目中导入数据models模块 from assets import models from rest_framework import routers,serializers,viewsets #定义一个表现形式 class UserSerializer(serializers.ModelSeriallizer): class Meta: model = models.UserProfile fields = ( 'username' , 'name' , 'token' , 'email' , 'is_staff' ) class AssetSerializer(serializers.ModelSerializer): class Meta: model = models.Asset ... |
1 2 3 4 5 6 7 8 9 10 11 | from rest_framework import viewsets from assets import models from assets import rest_searializer class UserViewSet(viewsets.ModelViewSet): queryset = models.UserProfile.objects. all () serializer_class = rest_searializer.UserSerializer class AssetViewSet(viewsets.ModelViewSet): queryset = models.Asset.objects. all () serializer_class = rest_searializer.AssetSerializer |
rest_urls.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from rest_framework import routers from django.conf.urls import url,include from assets import rest_viewset router = routers.DefaultRouter() router.register(r 'users' ,rest_viewset.UserViewSet) router.register(r 'assets' ,rest_viewset.AssetViewSet) router.register(r 'manufactory' ,rest_viewset.ManufactoryViewSet) router.register(r 'business_unit' ,rest_viewset.BusinessUnitViewSet) urlpatterns = [ url(r'',include(router.urls)), url(r '^api-auth' ,include( 'rest_framework.urls' ,namespace = 'rest_framework' )) ] |
settings.py:
1 2 3 4 5 6 7 | REST_FRAMEWORK = { # 使用Django的标准`django.contrib.auth`权限管理类, # 或者为尚未认证的用户,赋予只读权限. 'DEFAULT_PERMISSION_CLASSES' : [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] } |
使用API插入数据的例子,views.py中:
1 2 3 4 5 6 7 8 9 10 | def api_test(request): if request.method = = "GET" : return render(request, "test_post.html" ) else : data = json.loads(request.POST.get( "data" )) print ( "--->" ,data) rest_obj = rest_searializer.AssetSerializer(data = data,many = True ) if rest_obj.is_valid(): rest_obj.save() return render(request, "test_post.html" ,{ "errors" :rest_obj.errors, "data" :rest_obj.data}) |
其中many=true
,是将queryset多对多序列化,详细参数后面会有表述.
dss.Serializer 提供序列器
function serializer(data, datetime_format='timestamp', output_type='raw', include_attr=None, except_attr=None, foreign=False, many=False)
Parameters:
1 2 3 4 5 6 7 | data(Required|(QuerySet, Page, list , django model object )) - 待处理数据 datetime_format(Optional|string) - 如果包含 datetime 将 datetime 转换成相应格式.默认为 "timestamp" (时间戳) output_type(Optional|string) - serialize type . 默认“ raw ”原始数据,即返回 list 或 dict include_attr(Optional|( list , tuple )) - 只序列化 include_attr 列表里的字段。默认为 None exclude_attr(Optional|( list , tuple )) - 不序列化 except_attr 列表里的字段。默认为 None foreign(Optional| bool ) - 是否序列化 ForeignKeyField 。 include_attr 与 exclude_attr 对 ForeignKeyField 依旧有效。 默认为 False many(Optional| bool ) - 是否序列化 ManyToManyField 。 include_attr 与 exclude_attr 对 ManyToManyField 依旧有效 默认为 False |
参考:http://www.django-rest-framework.org/
参考:http://www.cnblogs.com/ccorz/p/Django-zhiRestful-API.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?