django-rest-framework是什么?如何开始使用?

2022-09-1719:59:05后端程序开发Comments895 views字数 3427阅读模式

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

所以一句话总结就是:restful是一种设计风格,而不是一种新技术。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

具体来说,就是把所请求的实体当作资源,通过http自带的方法(get,post,put,delete)来进行对应的增删改查等操作。比如,get请求就是获取资源。get /user/可以获取用户列表;get /user/1可以获取id=1的用户,其他的方法以此类推。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

django-rest-framework
官方简介如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

简单来说,django-rest-framework的作用等同于django中的view+form,我们既可以基于model来直接生成接口,也可以自定义serializers(跟form的用法很像)的字段来生成接口。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

快速上手
根据需求来学习可能更容易理解一些!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

假设需求如下:需要一套博客接口,接口能够实现如下功能:博客列表,博客详情,新建博客,删除博客文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

知道需求后,就好对症下药了!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

1.安装:
pip install djangorestframework文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

并且将rest_framework添加到installed_app中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

//同时需要安装另外一个依赖包:pip install coreapi文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

2.编写serializer文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

在blog app下新建serializers文件,并在其中编写如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

# 博客列表的序列化类
class PostSerializer(serializers.ModelSerializer):
category = serializers.SlugRelatedField(
read_only=True,
slug_field='name',
)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

tag = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field='name',
)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

owner = serializers.SlugRelatedField(
read_only=True,
slug_field='username',
)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S')文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

class Meta:
model = Post
fields = ['id', 'title', 'category', 'tag', 'owner', 'created_time']文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

# 博客详情的序列化类
class PostDetailSerializer(PostSerializer):
class Meta:
model = Post
fields = ['id', 'title', 'category', 'tag', 'owner', 'content_html', 'created_time']
z文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

这个写法和modelform的写法是一致的,djangorestframework和django中deform是等同的,它页提供了类似forms.Form和forms.ModelForm的类(serializers.Serializer和serializers.ModelSerializer)。基于同样的逻辑,我们定义的PostSerializer中可以继续实现自定义字段,自定义检查逻辑,自定义数据处理逻辑等方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

有了serializers之后,新建view层的逻辑,在blog app下新建一个文件apis.py,编写如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

class PostViewSet(viewsets.ModelViewSet):
serializer_class = PostSerializer
queryset = Post.objects.filter(status=Post.STATUS_NORMAL)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

def retrieve(self, request, *args, **kwargs):
self.serializer_class=PostDetailSerializer
return super().retrieve(request,*args,**kwargs)
这样就完成了CRUD(c:create新增,r:retrieve查询,u:update更新,d:delete删除)操作的定义。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

上面的逻辑代码编写完成后就可以配置urls了!因为是一套接口,所以django-rest-framework还提供了router的组件来帮我们更好的生成url。在urls.py中增加如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

from rest_framework.routers import DefaultRouter
router=DefaultRouter()
router.register(r'post',PostViewSet,basename='api-post')
urlpatterns = [
url(r'^api/',include((router.urls,'api'),namespace='api')),
]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

完成以上操作后就有了多个接口。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

例:博客列表接口:/api/post/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

博客详情接口: /api/post// blog_id=1的样例如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

配置API DOCS文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

在需要提供接口给其他团队的情况下,接口文档是整个项目开发流程中必备的产出品之一。编写接口文档是一个相对繁琐且枯燥的工作,并且页需要很细心才行,但大部分情况下需要做的就是把定义好的接口格式抄写到文档中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

同django的第三方插件sumpleui一样,定义好model,完成一些相关配置之后,然后得到界面。那么,是否可以通过简单配置就得到文档呢,甚至得到一套接口的测试工具?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

答案是:可以!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

那就是djangorestframework提供的docs工具!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

配置非常简单,在urls中增加一行代码即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

配置前先安装另一个依赖库:pip install coreapi文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

需要新增如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

from rest_framework.documentation import include_docs_urls文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

urlpatterns=[
url(r'^api/docs/', include_docs_urls(title='typeidea apis'))
]
以上配置完成后重启项目,访问/api/docs/ 可能会报如下错误:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

解决方法也非常简单,参照博客:使用coreapi时提示AttributeError: 'AutoSchema' object has no attribute 'get_link' 错误的解决办法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

即在settings中增加如下代码即可:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
以上配置完成后,重启项目再次访问/api/docs/应该就可以得到如下界面了!其内容就由你自己去慢慢体验摸索啦!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

总结:djangorestframework是我今天刚刚学习的一个django第三方插件,一开始学的时候还是有点难理解感觉,经过这一天的这么折腾之后,加上这篇博客对其的一个总结,感觉似乎还是慢慢地开始理解消化了,总之,亲身体验,这确实是一个非常好用的第三方插件,风格真的和django很像,从学习djago开始,到对django有了一个大概的了解以后,再学习这个插件,它们给我的相同感受就是:考虑的周到!让开发者能够使用更少的代码实现更多的功能!简直就是开发者的福音!但是这也许会让开发者走另一个极端,毕竟人总是喜欢偷懒的,也许心里会默默想:大佬们都把现成的架子都给我搭好了,直接用,真香!干嘛还自己写?是的,这种想法没错,但是我们在使用一些优秀的框架或者插件的时候,更应该去以学习的心态去使用,不仅要知其然那个,更要知其所以然,所以,不能忘本,写代码的本领不能因此就退化了,多看看源码,多照着敲敲还是有好处滴~
————————————————
版权声明:本文为CSDN博主「little亮_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/max_LLL/article/details/122600800文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/27698.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/27698.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定