django CBV 及其装饰器
#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 及其装饰器的更多相关文章
- Django CBV加装饰器、Django中间件、auth模块
一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...
- Django CBV方法装饰器
from django.utils.decorators import method_decorator 1.在post 或 get方法 添加 @method_decorator(装饰器) 2.给类添 ...
- day054 组件 CBV FBV 装饰器 ORM增删改查
组件: 把一小段HTML 放在一个HTML中 nav.html 使用: {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...
- CBV加装饰器解决登录注册问题和 <<中间件>>
文本目录 CBV加装饰器解决登录注册问题 一:什么是中间件 二:中间件有什么用 三:自定义中间件 四:中间件应用场景 五:SCRF TOKEN跨站请求伪造 六: 其他操作 CBV加装饰器解决登录注册问 ...
- diango中的MTV——FBV/CBV以及装饰器的复用问题解决
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- Cookie与Session、CBV添加装饰器
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- django的FBV和CBV的装饰器例子
备忘 def auth(func): def inner(request,*args,**kwargs): u = request.COOKIES.get('username111') if not ...
- 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查
内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...
- django中@property装饰器的运用
python提供的内置装饰器——staticmethod.classmethod和property 在OSQA中,@property的使用频率是非常高的.下面就是它的使用方法: @property 可 ...
随机推荐
- jdk、jre、jvm分别是什么?有什么联系?
JDK:是Java Development Kit的缩写,是Java的开发工具包,JDK是整个JAVA的核心.它提供了编译.运行Java程序所需的各种工具和资源.有了它,Java开发者就可以编译和运行 ...
- NSSCTF-[UTCTF 2020]Zero
做misc嘛,先把题目一开始就给的一串英文翻译一下, 可以看到说明的是这个txt文档可能是包含其他的文本量,这个文本里面还有其他的东西,只是正常是看不到, 使用binwalk或者fomost分离尝试, ...
- Linux主机内存评估手册-从零到无
--时间:2020年10月22日 --作者:飞翔的小胖猪 文档基于Centos Linux操作系统作为生产服务器运行环境.实时的查看分析当前系统内存的使用情况是否存在内存瓶颈,结合应用及现行业务需求分 ...
- k8s全方位监控-prometheus-alertmanager部署-配置第一条告警邮件
1.alertmanager告警插件部署 [root@VM_0_48_centos prometheus]# cat alertmanager-pvc.yaml apiVersion: v1 kind ...
- gvim 配置vimrc
##################################################################### normal setup################## ...
- LeetCode-095-不同的二叉搜索树 II
不同的二叉搜索树 II 题目描述:给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 .可以按 任意顺序 返回答案. 二叉搜索树(Binary ...
- Mybatias
Mybatis 1.简介 1.1丶什么是Mybaties MyBatis 是一款优秀的持久层框架, 它支持自定义 SQL.存储过程以及高级映射. MyBatis 免除了几乎所有的 JDBC 代码以及设 ...
- Laravel7-验证器使用
- think php 软删除
<a href="/admin/exam/delete/id/{$v.id}" onclick="if(confirm('确认删除?')) location.hre ...
- ElasticSearch安装 --- windows版
文件下载地址: 链接:https://pan.baidu.com/s/1_Cy_Sy1-vOvsUxliM-EZHQ 提取码:qpcv 定义: Elasticsearch 是一个分布式的搜索和分析引擎 ...