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 可 ...
随机推荐
- Linux系列——挂载Windows虚拟文件夹到Linux系统
在windows操作系统上安装多台Linux虚拟机,需要方便的在windows系统和虚拟机上的Linux系统进行文件拷贝. 需要用到共享虚拟文件夹技术,将windows文件夹挂载到linux系统中 ...
- 二十七 集合!!!!!!!!set 二十八 文件
0: 不知道啊 去除重复元素? 1:frozenset 2:len(x) 3:直接一个错的报 4:好像一样 错 完全不一样的说 set = {[1,2]}这是想干嘛 :列表怎么可以进 ...
- Cache写机制
Cache 写机制分为:Write-through和Write-back Write-through(直写模式) 定义:在数据更新时,同时写入缓存Cache和后端存储(主存): 优点:操作简单: 缺点 ...
- Tableau绘图一热图、日历图、人口金字塔、标靶图、凹凸图、帕累托图
Tableau绘图一热图.日历图.人口金字塔.标靶图.凹凸图.帕累托图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一.热图 例子:示例超市 可以通过更改颜色来改 ...
- WPF优秀组件推荐之LiveCharts
概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...
- Kubernetes上安装Metrics-Server
操作场景 metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部 ...
- 『现学现忘』Docker常用命令 — 20、容器常用命令(二)
提示:接上一篇 目录 9.后台启动容器 10.查看容器日志 11.查看容器内运行的进程 12.查看容器内部细节 9.后台启动容器 后台启动容器也叫启动守护式容器. 命令:docker run -d 镜 ...
- Python文件读写--错误一
在学习python的文件读写操作的时候,我遇到了一点麻烦事,觉得可以记录下来,先上代码吧. with open('test.txt') as file: file.write('test') prin ...
- git 回滚方式
git push 命用于从将本地的分支版本上传到远程并合并. 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程 ...
- JavaWeb 05_JDBC入门及连接MySQL
一.概念 *概念: Java DataBase Connectivity Java数据库连接, Java语言操作数据库* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...