#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. 攻防世界Web_ics_05

    题目: 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 题目场景:   1.进入云平台设备中心界面,查看以下源码发现?page= ,(点下云平台设备维护中心url里也能出?page ...

  2. 答疑记录:jmeter从返回的html中提取指定内容

    返回的html(截取部分),要求从中提取:2022-02-22 13:46:15 <!-- 前面省略557行 --> <td>2022-02-22</td> < ...

  3. 同事会建模,会数据分析,会可视化图表,而你只会用EXCEL?

    ​小李是一家外企的数据分析师,平时处理的都是亿万行级别数据量的报表,为了可以胜任这份工作,小李早早地就学会了各种大数据工具,而且做出来的数据模型高度自动化,效率极高,为公司创造了非常大的价值.因为小李 ...

  4. Mybatis学习笔记(详细)

    介绍 三层架构:视图层.业务逻辑层.持久层 mybatis框架: 执行数据库操作,完成对数据库的增删改查,封装了jdbc mapper映射,将表中数据转为一个Java对象,一个表对应一个接口 Myba ...

  5. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  6. 积分图(二) - Block - Match(统计)滤波器

    原文地址(英文) 积分图 是 [Crow(1984 年)] 提出的用于提高多尺度透视投影中纹理的渲染速度的一种技术. 积分图最流行的应用是 快速归一化互相关 (fast normalized cros ...

  7. logging日志模块、配置字典

    logging日志模块 知识点很多 但是需要掌握的很少(会用即可) import logging # 日志有五个等级(从上往下重要程度不一样) # logging.debug('debug级别') # ...

  8. go泛型教程

    泛型 原文 在线阅读 导读: 约束 使用方法 实现原理 跟其它语言的泛型进行对比 用例子学泛型 issues 泛型需满足 go1.18+ 约束 go使用interface作为约束,约束的意思是约束了这 ...

  9. JZ-041-和为 S 的连续正数序列

    和为 S 的连续正数序列 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列 的和为100( ...

  10. 矩池云上关于conda的一些使用技巧

    关于源的加速和使用 bash /public/script/switch_conda_source.sh 输入想要切换的源前面的序号,然后按回车,源会自动切换. 当然这个地方需要注意的是如果遇到一些国 ...