001---CBV和restful规范
CBV 和 restful规范
知识点准备:
django的view
- FBV:基于函数的视图
- CBV:基于类的视图
urls.py from django.urls import path
from app01.views import StudentsView urlpatterns = [
path('students/ ',StudentsView.as_view()),
] views.py from django.views import View
from django.shortcuts import HttpResponse class StudentsView(View): def get(self,request,*args,**kwargs):
return HttpResponse('GET 请求') def post(self,request,*args,**kwargs):
return HttpResponse('POST 请求')
csrf_token
- 原理:基于中间件的process__view()做的,用户发送get请求的时候django会给他返回一个随机字符串,下次用户发送post请求的时候,要求携带这个随机字符串,验证是否一样,
- 免除:
csrf_exempt - 验证:
csrf_protect - 为什么不写在process__request()里面?
因为它中间件要判断视图函数有没有加免除或者验证的装饰器,如果在request里面,他无法获取哪些视图函数加了装饰器。
# 第一种:给方法加
from django.views import View
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
class StudentsView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(StudentsView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
print('GET')
return HttpResponse('GET请求')
def post(self, request, *args, **kwargs):
return HttpResponse('POST请求')
# 第二种:给类加
@method_decorator(csrf_exempt,name='dispatch')
class TeachersView(View):
def get(self, request, *args, **kwargs):
print('GET')
return HttpResponse('GET请求')
def post(self, request, *args, **kwargs):
return HttpResponse('POST请求')
CBV源码剖析
- FBV 和 CBV
基于反射实现根据请求方式不同,执行不同的方法
原理:- 路由 cls.as_view()-->view()-->self.dispatch()-->反射
- 视图:get post delete put……
- 流程
class StudentsView(View): def dispatch(self, request, *args, **kwargs):
# return HttpResponse('dispath')
func = getattr(self,request.method.lower())
return func(request, *args, **kwargs) def get(self, request, *args, **kwargs):
return HttpResponse('GET请求') def post(self, request, *args, **kwargs):
return HttpResponse('POST请求') def delete(self,request,*args,**kwargs):
return HttpResponse('DELETE请求') def put(self,request,*args,**kwargs):
return HttpResponse('PUT请求')
- 继承(多个类共用的功能,避免重复编写)
class MyBaseView(object):
def dispatch(self, request, *args, **kwargs):
print('before')
func = super(MyBaseView, self).dispatch(request, *args, **kwargs)
print('after')
return func class StudentsView(MyBaseView, View): def get(self, request, *args, **kwargs):
print('GET')
return HttpResponse('GET请求') def post(self, request, *args, **kwargs):
return HttpResponse('POST请求') def delete(self, request, *args, **kwargs):
return HttpResponse('DELETE请求') def put(self, request, *args, **kwargs):
return HttpResponse('PUT请求')
restful规范
十条规范
API与用户的通信协议:https
域名:
- URL方式:www.abc.com/api/
- 子域名方式(存在跨域问题) :www.abc.com www.api.abc.com
版本:www.abc.com/api/v1/
面向资源(视网络上的任何数据为资源,均使用名词、可复数):www.abc.com/api/v1/order/
过滤,通过url传递搜索条件
根据method不同进行不同的操作
from django.urls import path
from app01.views import OrderView
urlpatterns = [
path('order/',OrderView.as_view()),
]
class OrderView(View):
def get(self, request, *args, **kwargs):
return HttpResponse('获取订单')
def post(self, request, *args, **kwargs):
return HttpResponse('创建订单')
def delete(self, request, *args, **kwargs):
return HttpResponse('删除订单')
def put(self, request, *args, **kwargs):
return HttpResponse('更新订单')
- 状态码
- 错误处理
- 返回结果
- 返回结果中就是url
django rest_framework
- 安装:pip install djangorestframework
- 使用
- 认证
from rest_framework.views import APIView
from rest_framework.exceptions import AuthenticationFailed class MyAuthentication(object): def authenticate(self, request): token = request._request.GET.get('token')
# 可以做用户名密码验证
if not token:
raise AuthenticationFailed('认证失败')
return (1, 2) def authenticate_header(self, request):
pass class DogView(APIView):
authentication_classes = [MyAuthentication] def get(self, request, *args, **kwargs):
return HttpResponse('获取小狗') def post(self, request, *args, **kwargs):
return HttpResponse('创建小狗') def delete(self, request, *args, **kwargs):
return HttpResponse('删除小狗') def put(self, request, *args, **kwargs):
return HttpResponse('更新小狗')
- 认证
001---CBV和restful规范的更多相关文章
- 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用
一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...
- Django框架(十七)-- CBV源码分析、restful规范、restframework框架
一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view) 2.as_view方法 as_view是 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
- DRF cbv源码分析 restful规范10条 drf:APIView的源码 Request的源码 postman的安装和使用
CBV 执行流程 路由配置:url(r'^test/',views.Test.as_view()), --> 根据路由匹配,一旦成功,会执行后面函数(request) --> 本质就是执 ...
- Django框架(十八)—— CBV源码分析、restful规范、restframework框架
目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...
- Restful规范-APIView源码分析
目录 一.Restful规范 十条规范 二.drf的简单使用 三.APIView源码分析 CBV源码分析 APIView源码分析 一.Restful规范 Restful规范是一种web API接口的设 ...
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
- restful 规范(建议)
需求:开发cmdb,对用户进行管理. 做前后端分离,后端写api(URL),对用户表进行增删改查,应该写四个URL(还要给文档(返回值,返回,请求成功,干嘛,失败,干嘛)),然后分别写视图函数. ht ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
随机推荐
- Android SDK和ADT无法更新的解决办法
重要的东西要标红: 经过另外一台电脑测试,按照第二步设置好hosts后,可以一并解决 SDK 和 ADT的更新,无需单独设置SDK Manager. 这里还是写出如何设置SDK Manager以作记录 ...
- Java学习---JDK的安装和配置
控制面板\系统和安全\系统 CLASSPATH %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; JAVA_HOME C:\Program Files ...
- MySQL 数据库--SQL语句优化
explain查询和分析sql 开发中,为满足一业务功能,使用mysql书写sql时,一条sql往往有多种写法,那么我们就需要选择执行效率比较高的sql. 因此要比较分析sql的执行过程,且同一条sq ...
- Linux下中间人攻击利用框架bettercap测试
0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名的莫过于ettercap,而开发bettercap的目的不是为了追赶它,而是替代它 ...
- mac本机svn命令使用
公司项目用到svn,之前做版本管理用的是git. 现在对svn回顾学习了一下. 这里有一篇很好的入门教程 http://www.rubyrobot.org/tutorial/subversion-wi ...
- ubuntu命令安装jdk
1.ubuntu使用的是openjdk,所以我们需要先找到合适的jdk版本.在命令行中输入命令: $apt-cache search openjdk 1 返回结果列表(因个人电脑而有所不同): def ...
- java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive
问题:使用Spring时,报错:java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive问题原因: 少了as ...
- 【Autoprefixer】Hbuilder中配置Autoprefixer
1.安装node.js 2.安装Autoprefixer 3.安装postcss-cli 4.配置外部工具 打开HBuilder,运行-外部工具-外部工具配置,如图: 新建一个外部工具配置 名称填写a ...
- Ajax请求与浏览器缓存
在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度. 1. Ajax Request 使用jQuery框架可 ...
- Spring(四)之Bean生命周期、BeanPost处理
一.Bean 生命周期 Spring bean的生命周期很容易理解.当bean被实例化时,可能需要执行一些初始化以使其进入可用状态.类似地,当不再需要bean并从容器中移除bean时,可能需要进行一些 ...