FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择

在一个项目中,如果注册启用了CsrfViewMiddleware中间件,则项目中所有的视图函数和视图类在执行过程中都要进行CSRF验证。

此时想使某个视图函数或视图类不进行CSRF验证,则可以使用csrf_exempt装饰器装饰不想进行CSRF验证的视图函数

看看FBV的代码:

URL的写法:
from django.conf.urls import url
from api import views urlpatterns = [
# FBV 方式
url(r'asset',views.asset,name='asset'),
] views的函数方法:
from django.shortcuts import render,HttpResponse,reverse,redirect
import json # 由于post需要csrf校验,所以需要排除csrf校验 from django.views.decorators.csrf import csrf_exempt @csrf_exempt
def asset(request):
if request.method == "POST":
ret = json.loads(request.body.decode('utf-8'))
print(ret)
return HttpResponse("接收成功")
return HttpResponse("OK")

  

同样的,如果在一个Django项目中,没有注册起用CsrfViewMiddleware中间件,但是想让某个视图函数进行CSRF验证,则可以使用csrf_protect装饰器

csrf_protect装饰器的用法跟csrf_exempt装饰器用法相同,都可以加上视图函数上方装饰视图函数

from django.views.decorators.csrf import csrf_exempt,csrf_protect

@csrf_protect
def index(request):
pass

CBV的代码

URL的写法
from django.conf.urls import url
from api import views urlpatterns = [
# CBV 方式
url(r'asset', views.Asset.as_view()), ] views的类方法 # 第二种方式:CBV方式
# 由于post需要csrf校验,所以需要排除csrf校验
from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt @method_decorator(csrf_exempt,name='dispatch')
class Asset(View):
def get(self,request):
pass def post(self,request):
ret = json.loads(request.body.decode('utf-8'))
print(ret)
return HttpResponse("接收成功")

  

以上就是FBV CBV的方法,上面排除csrf的效验是因为:在作为API接口,需要将数据POST到服务端,无法进行效验,才进行排除,如果都是在django中,就不要排除

我们也可以采用django提供的API方法,这种方法就可以不用写csrf_exempt

# 第三种方式:使用django提供的API方法
# 使用的URL方法和 CBV是一样的
"""
先安装djangorestframework
进行导入,继承APIView方法,可以不用写csrf_exempt
"""
from rest_framework.views import APIView
from rest_framework.response import Response class Asset(APIView):
def get(self,request):
pass def post(self,request):
ret = json.loads(request.body.decode('utf-8'))
print(ret)
return Response("接收成功1")

  

  

Django FBV CBV以及使用django提供的API接口的更多相关文章

  1. Django FBV/CBV、中间件、GIT使用

    s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...

  2. django FBV +CBV 视图处理方式总结

    1.FBV(function base views) 在视图里使用函数处理请求. url:        re_path('fbv', views.fbv),        # url(r'^fbv' ...

  3. 【转】根据中国气象局提供的API接口实现天气查询

    本文转载自 老三 的 三叶草 中国气象局提供了三个天气查询的API接口: [1]http://www.weather.com.cn/data/sk/101190101.html [2]http://w ...

  4. 根据中国气象局提供的API接口实现天气查询

    中国气象局提供了三个天气查询的API接口: [1]http://www.weather.com.cn/data/sk/101190101.html [2]http://www.weather.com. ...

  5. [oldboy-django][2深入django]FBV + CBV + 装饰器

    FBV django CBV & FBV - FBV function basic view a. urls 设置 urls(r'^test.html$', views.test) b. vi ...

  6. ASP.NET获取百度地图提供的API接口里面的JSON

    思路:开始是想直接在前台获取,但是跨域访问还是有点难度,而且格式必须是josnp格式的,最后嫌麻烦,不得已放弃. 我做的ASP.NET  而这个有自带的解析类,直接引用就行了 先在后台获取到JOSN: ...

  7. 如何利用Skyline的TerraExplorer Pro 6.5提供的API接口实现矢量图层数据的动态投影

    Skyline 支持国内常见的地图投影坐标系,包括WGS84.Beijing54.西安80.2000坐标系等,也可以自定义坐标系,比如一些做过参数变换加密的坐标系等. <!DOCTYPE htm ...

  8. springcloud提供开放api接口签名验证

    一.MD5参数签名的方式 我们对api查询产品接口进行优化: 1.给app分配对应的key.secret 2.Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数 ...

  9. django——FBV与CBV

    引言 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class bas ...

随机推荐

  1. 【计算机网络】网络地址转换NAT

    网络地址转换NAT 要知道到每个IP使能的设备都需要一个IP地址.以一个家庭为例,假设当地的ISP已为该家庭分配过一块地址,但是后期家庭中的智能设备增加(智能手机.电脑等),这些都需要IP地址才可上网 ...

  2. 如何在GitBook中使用Git管理

    1.在GitBook中新建[Book],找到对应目录下的位置,拷贝[book]名称后删除文件夹以及文件,新建文件夹重命名为[book]名称 2.打开文件夹,在根目录下选择创建git仓库,即 git i ...

  3. 系列文章--Python Web编程

    我从网上找到了其他园友的文章,很不错,留着自己学习学习. Python Web编程(一)Python Web编程(二)Python Web编程(三)Python Web编程(四)Python Web编 ...

  4. USRPX310 在GNU Radio上更改通道A或B

    UHD:USRP sink和USRP source默认是A通道发射接收.或设置 Mb0:Subdev Spec: A:0 更改为B通道收发:设置 Mb0:Subdev Spec: B:0

  5. Httpd总结 :HTTPD的基本概念

    这是一篇为初学者准备的文章,所以作者会尽量从基础出发,尽量细致的描述每一个细节,以求让初学者不会一头雾水,有一定基础的同学就不用看了,以免浪费你的时间.   假设博主今天春心荡漾,想要访问一些不可描述 ...

  6. vector引用参数

    #include<iostream> #include<vector> using namespace std; //定义一个计算数字的函数,返回计算后的vector numb ...

  7. 白话Spring(基础篇)---AOP(execution表达式)(转)

    [一知半解,就是给自己挖坑] 作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! ----------------- ...

  8. [Git] How to revert one file changes from one commit

    Many times we might changed one file which we don't intent to do... but it was too late, until we fo ...

  9. java+大文件上传解决方案

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...

  10. CDQ解决一些三维偏序的问题

    本来几天前就该记录的东西,硬生生被我拖到了现在,太懒了... 在cdq学习时,二维偏序已经解决了,无非就是先sort使第一维有序,然后再用cdq或者数据结构处理第二维.而三维偏序的时候呢,大佬的做法好 ...