#urls.py
from django.contrib import admin
from django.urls import path, re_path
from app01 import views urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^student/', views.StudentView.as_view()),
]
#views.py

from django.shortcuts import render, HttpResponse
from django.views import View
from app01 import models class StudentView(View): def get(self, request):
models.UserInfo.objects.create(name='yyy', password='123')
return HttpResponse('hello word')

装饰器:

1、* 加在dispatch方法上*

(1)CSRF Token相关装饰器在CBV只能加到dispatch方法上

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator class UploadFileView(View):
"""上传文件""" @method_decorator(csrf_exempt) # CSRF Token相关装饰器在CBV只能加到dispatch方法上
def dispatch(self, request, *args, **kwargs):
return super(UploadFileView, self).dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs):
return render(request, "thickness/upload_file.html") def post(self, request, *args, **kwargs):
result = {'status': False, 'code': 1, 'percent': 0, 'count': 0, 'done_status': False}
     .............
return HttpResponse(json.dumps(result))

(2)login装饰器

使用类定义的view,是不能够直接使用 login_required进行装饰的

需要重新定义一个 LoginRequired类,让视图类去继承:

 1 from django.contrib.auth.decorators import login_required
2 from django.utils.decorators import method_decorator
3
4
5 class LoginRequiredMixin(object):
     #dispath 这么写所有的请求方法都要做登录校验
6 @method_decorator(login_required(login_url="/login/"))
7 def dispatch(self, request, *args, **kwargs):
8 return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
9
10
11 #views
12 class IndexView(LoginRequiredMixin, View):
13 """首页"""
14 def get(self, request, *args, **kwargs):
15
16 return render(request, "index.html")

2、*CBV结合装饰器*

(1)直接加在视图类上,但method_decorator必须传 name 关键字参数

from django.shortcuts import redirect, render
from django.contrib.auth import models def wrapper(func):
def inner(request, *args, **kwargs):
exist = models.User.objects.count()
if exist != 0:
ret = func(request, *args, **kwargs)
print('已走装饰器')
return ret
else:
return redirect("/thick-admin/")
return inner @method_decorator(wrapper, name="get")
class LoginView(View):
def get(self, request, *args, **kwargs):
return render(request, 'login.html') def post(self, request, *args, **kwargs):
error_msg = ''
username = request.POST.get('username')
password = request.POST.get('password')
rmb = request.POST.get('rmb') user = authenticate(username=username, password=password)
if user:
print("passed authentication")
login(request, user) # 把user封装到request.session中
if rmb:
request.session.set_expiry(60 * 60 * 24 * 30)
print('rmb')
return redirect(request.GET.get('next', '/thickness/index')) # 登录后跳转至next指定的页面,否则到首页
else:
error_msg = "用户名或密码错误!" return render(request, 'login.html', locals())

(2)加在CBV视图的get或post方法上

1 class LoginView(View):
2 @method_decorator(wrapper)
3 def get(self, request, *args, **kwargs):
4 return render(request, 'login.html')

 

django CBV 及其装饰器的更多相关文章

  1. Django CBV加装饰器、Django中间件、auth模块

    一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...

  2. Django CBV方法装饰器

    from django.utils.decorators import method_decorator 1.在post 或 get方法 添加 @method_decorator(装饰器) 2.给类添 ...

  3. day054 组件 CBV FBV 装饰器 ORM增删改查

    组件: ​ 把一小段HTML 放在一个HTML中 nav.html ​ 使用: ​ {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...

  4. CBV加装饰器解决登录注册问题和 <<中间件>>

    文本目录 CBV加装饰器解决登录注册问题 一:什么是中间件 二:中间件有什么用 三:自定义中间件 四:中间件应用场景 五:SCRF TOKEN跨站请求伪造 六: 其他操作 CBV加装饰器解决登录注册问 ...

  5. diango中的MTV——FBV/CBV以及装饰器的复用问题解决

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  6. Cookie与Session、CBV添加装饰器

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  7. django的FBV和CBV的装饰器例子

    备忘 def auth(func): def inner(request,*args,**kwargs): u = request.COOKIES.get('username111') if not ...

  8. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  9. django中@property装饰器的运用

    python提供的内置装饰器——staticmethod.classmethod和property 在OSQA中,@property的使用频率是非常高的.下面就是它的使用方法: @property 可 ...

随机推荐

  1. 我哭了 看到RCNN 和FAST RCNN时 想着为什么要选候选框呢?能不能直接回归出来候选框?

    这是不是一个超级好的IDEA 我是不是要发顶会了!!! 看到yolo  直接绝望 果然 你能想到的都已经被发表了. 生不逢时啊!!!

  2. Mac下的平铺式桌面 - Yabai

    Mac下的平铺式桌面 - Yabai 近来无事,凑着周末休息的时间,想折腾一下 Mac.很久之前就有朋友给我推荐过一款名为"Yabai"的平铺式桌面管理软件,今天,就折腾起来了. ...

  3. Qt:QDir

    0.说明 QDir提供了访问目录及目录下内容的类. QDir既可以用于访问文件系统,也可以用于访问Qt 资源系统(Qt's resource system.). Qt用 "/" 作 ...

  4. (第一章第五部分)TensorFlow框架之变量OP

    系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...

  5. (五)目标检测算法之Faster R-CNN

    系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...

  6. TCP/IP方法安装打印机

    在计算机安装打印机驱动和添加打印机(TCP/IP方法) 一:打印机的型号和驱动. 1.1:如何知道自己的打印机是什么品牌和型号?: 通过观察打印机表面的logo或者其他文字图案来辨别 如下图: 1.2 ...

  7. 联邦学习:按混合分布划分Non-IID样本

    我们在博文<联邦学习:按病态独立同分布划分Non-IID样本>中学习了联邦学习开山论文[1]中按照病态独立同分布(Pathological Non-IID)划分样本. 在上一篇博文< ...

  8. vcpkg 换源

    vcpkg 的下载速度饱受诟病已久,但是并不见官方团队的动作,虽然有人提了 issue,但是提交的代码并不符合要求. 我自己在下载包的时候,特别是在下载位于 github 的包时,下载直接中断,所以我 ...

  9. Kubernetes系列(二)Service

    作者: LemonNan 原文地址: https://juejin.im/post/6863704173931593736 Service Kubernetes 的 Service 可以为一组具有相同 ...

  10. LGP4463题解

    这玩意儿怎么看上去就很经典啊( 哦互不相同啊,那没事了( 考虑一个 \(\rm DP\).由于限制了互不相同,那么我们考虑从值域开始想. 设 \(dp_{n,k}\) 为在 \([1,n]\) 中选了 ...