restframework 的一些操作
路飞学城项目:
1 Vue
2 restframework框架(一周)
3 学城项目(一周-两周)
day98
1 CBV(class based view) 与 FBV(function based view)
class LoginView(View):
def get(self,request):
return render(request,"login.html")
def post(self,request):
user=request.POST.get("user")
pwd=request.POST.get("pwd")
if 1:
return HttpResponse("OK")
url(r'^index/', views.index) # 用户一旦访问:index(request)
# url(r'^login/', views.LoginView.as_view()),
# url(r'^login/', View.as_view()),
# url(r'^login/', View.view),
# 用户一旦访问get请求login-----》
view(request):
return self.dispatch(request, *args, **kwargs)
dispatch(self, request, *args, **kwargs):
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower())
return handler(request, *args, **kwargs)
RESTful:(面向资源架构(ROA:Resource Oriented Architecture))
1 一切皆资源
books books
book/add/ addbook
book/1/change changebook
book/1/delete changebook
restful:
get 查看
books ------------>
post 添加
get 查看
book/1/-------------
delete 删除
put 更新
2
GET :从服务器取出资源(一项或多项)
POST :在服务器新建一个资源
PUT :在服务器更新资源(客户端提供改变后的完整资源)
PATCH :在服务器更新资源(客户端提供改变的属性)
DELETE :从服务器删除资源
restframework框架:
(1) APIView (******)
class PublishView(APIView):
def get(self,request):
publish_list=Publish.objects.all()
ret=serialize("json",publish_list)
return HttpResponse(ret)
def post(self,request):
pass
#url(r'^publishes/', views.PublishView.as_view()),
#url(r'^publishes/', APIView.as_view()),
#url(r'^publishes/', View.view),
用户一旦访问get请求
View.view(request):
return self.dispatch(request, *args, **kwargs)
---- APIView.dispatch(request, *args, **kwargs):
源码
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower())
response = handler(request, *args, **kwargs)
return response
(2) 序列化组件 (******)
将queryset序列化成json
Django序列化组件:
publish_list=Publish.objects.all()
ret=serialize("json",publish_list)
restframework的序列化组件
[obj1,obj2,...]--------> [{},{},{}]
obj--------------------> {}
# 自定义序列化组件
class BookSerializers(serializers.Serializer):
title=serializers.CharField()
price=serializers.CharField()
publishDate=serializers.DateField()
# 针对一对多
publish=serializers.CharField(source="publish.name")
publish_email=serializers.CharField(source="publish.email")
# 针对多对多
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
data=[]
for i in obj.authors.all():
temp=[]
temp.append(i.pk)
temp.append(i.name)
data.append(temp)
return data
# ModelSerializer序列化组件
class BookSerializers(serializers.ModelSerializer):
class Meta:
model=Book
fields="__all__"
publish = serializers.CharField(source="publish.name")
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
data=[]
for i in obj.authors.all():
temp=[]
temp.append(i.pk)
temp.append(i.name)
data.append(temp)
return data
1
"books" GET:获取所有数据
POST:添加一条数据
"book/1" GET:获取单条数据
DELETE:删除一条数据
PUT/PATCH:更新一条数据
2 功能之序列化:
book_list = Book.objects.all()
ps = BookSerializers(book_list, many=True)
ps.data
book_obj=Book.objects.filter(pk=pk).first()
bs=BookSerializers(book_obj,many=False)
3 校验字段与操作记录(ModelSerializer拥有)
# 添加数据
bs=BookSerializers(data=request.data)
if bs.is_valid(): #校验字段接口
bs.save() # 生成记录接口
return Response(bs.data) # 序列化接口
# 更新数据
bs=BookSerializers(data=request.data,instance=book_obj)
if bs.is_valid(): #校验字段接口
bs.save() #更新记录接口
return Response(bs.data) # 序列化接口
(3) 视图组件 (******)
(4) 解析器
(5) 认证组件
(6) 权限组件
(7) 频率组件
(8) 分页器
(9) 响应器
(10) url控制器
(11) 版本控制
restframework 的一些操作的更多相关文章
- 【Django】 rest-framework和RestfulAPI的设计
[rest-framework] 这是一个基于django才能发挥作用的组件,专门用于构造API的. 说到API,之前在其他项目中我也做过一些小API,不过那些都是玩票性质,结构十分简单而且要求的设计 ...
- django restframework permission
与 authentication 和 throttling 一起,permission 决定是应该接受还是拒绝访问请求.权限检查总是在视图的最开始处运行,在任何其他代码被允许进行之前.权限检查通常会使 ...
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- rest-framework总结
1. CBV: pass 2 .APIView class BookView(APIView):pass url(r'^books/$', views.BookView.as_view(),name= ...
- rest-framework序列化
快速实例 Quickstart 序列化 开篇介绍: ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /book ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- RestFramework——API基本实现及dispatch基本源码剖析
基于Django实现 在使用RestFramework之前我们先用Django自己实现以下API. API完全可以有我们基于Django自己开发,原理是给出一个接口(URL),前端向URL发送请求以获 ...
- RestFramework——API设计规范
what's the RESTful RestFramework是一个能快速为我们提供API接口,方便我们编程的框架.API是后端编程人员写的,为了让前端拿数据的一个接口,通常就是以url的形式存在. ...
- REST-framework快速构建API--四部曲
代码目录结构: 一.使用原生APIView 使用rest-framework原生的APIView实现过程: 以url(r'^books/$', views.BookView.as_view(),nam ...
随机推荐
- Tomcat服务器简介
- sublime3 There are no packages available for installation
我的是网上下载的绿色版 1.找到sublime\Data\Packages 删除Packages control相关的文件夹和文件 下载https://packagecontrol.io/Packa ...
- oracle DCL-(grant、revoke )
1.授权GRANT <权限列表> to <user_name>; 2.收回权限REVOKE <权限列表> from <user_name>
- C语言基础问题总结
Double 类型用 %f 接受会产生错误,应该用%lf C语言中SIN,COS的参数为弧度,角度应先转换为弧度才能计算,否则出错 三角形的判断条件,任意两边长度和大于第三边 闰年判断条件整百年为40 ...
- CF 1025C Plasticine zebra
昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题,昨晚连刚带猜弄出结论 考虑答案的取值,最优答案可能是一个后缀,或者是一个前缀,或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀 ...
- 在windows远程提交任务给Hadoop集群(Hadoop 2.6)
我使用3台Centos虚拟机搭建了一个Hadoop2.6的集群.希望在windows7上面使用IDEA开发mapreduce程序,然后提交的远程的Hadoop集群上执行.经过不懈的google终于搞定 ...
- 配置PL/SQL Developer连接Oracle数据库
准备: PL/SQL Developer:我用的是plsqldev1005(32位) win32_11gR2_client:记住一定是32位的,因为PL/SQL Developer只认32位的 安装成 ...
- Android之悬浮窗口实现(WindowManager)
工作中遇到一些项目需要把窗体显示在最上层,像来电弹窗显示电话号码等信息.拦截短信信息显示给用户或者游戏中实现声音的调节,我们想这些数据放在最上层,activity就满足不了我们的需求了,有些开发者使用 ...
- [译]javascript中的条件语句
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- vue配置vue-router
首先理清一下几个路由的基础概念: 1)route是一条路由,也就是映射,即A按钮→A内容,以数组形式存储 2)toutes:[]是一组路由,里面包含了若干条route,即route[{A按钮→A内容} ...