【python】Django系列05-Django中的类视图,看完这三点就懂了。

导读:本篇文章讲解 【python】Django系列05-Django中的类视图,看完这三点就懂了。,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

🙋作者:爱编程的小贤
⛳知识点:Django–类视图
🥇:每天学一点,早日成大佬

👊前言

💎 💎 💎今天我们进入Django类视图的学习啦!!! 😁 😁 😁 看完这一篇让你对类视图印象深刻 🚀 🚀 🚀学习之前先要好好复习回顾前面的内容哦!!!
如果你看完感觉对你有帮助,,,欢迎给个三连哦💗!!!您的支持是我创作的动力。🌹 🌹 🌹 🌹 🌹 🌹 感谢感谢!!!😘😘😘

🥂一、类视图的定义

1.什么是类视图

使用类来定义的视图,称为类视图。

2.如何定义类视图

定义类视图时,首先要导入View类,然后定义类视图时,继承此View类 from django.views import View
在这里插入图片描述
以上两种都可以

使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义

代码如下:

class Login(View): 
"""类视图:处理注册""" 
	def get(self, request): 
		# 处理GET请求 
		return HttpResponse('GET') 
		
	def post(self, request): 
		# 处理POST请求 
		return HttpResponse('POST')

3.与函数视图对比

函数视图的区分: 以函数的方式定义的视图称为函数视图,函数视图便于理解。
函数视图的缺点:遇到一个视图对应的路径提供了多种HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。如:
在这里插入图片描述

代码如下:

def register(request): 
"""处理注册""" 
	if request.method == 'GET': 
	# 处理GET请求,判断是GET/POST请求 
		return render(request, 'register.html') 
	else: 
	# 处理POST请求,实现注册逻辑
		pass

4.使用类视图的好处

使用类视图的好处

  • 代码可读性好
  • 类视图相对于函数视图有更高的复用性,如果其他地方需要用到某个类视图的特定逻辑,直接 copy该类视图即可。

🥂二、类视图的使用

定义类视图需要继承自Django提供的父类View,可使用:

from django.views.generic import View 
# 或者 
from django.views.generic.base import View

类视图与函数视图的路由配置不同,
配置类视图的路由时使用类视图的as_view()方法来添加。格式:path(‘路径/’, views.类名.as_view()),
如:

urlpatterns = [ 
	path('classview/', views.Login.as_view()), 
	]

🥂三、类视图装饰器

1.装饰器的作用

装饰器实质上就是一个函数,其可以让其他函数在不去改变任何代码的前提下增加额外的功能,装饰器的返回值是一个函数对象。

如下:
在这里插入图片描述

在这里插入图片描述
结果如下:
在这里插入图片描述

为类视图添加装饰器,可以使用两种方法。
为了理解方便,先定义一个为视图函数准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),以及一个要被装饰的类视图。
在这里插入图片描述

def my_decorator(func): 
	def wrapper(request, *args, **kwargs): 
		print('自定义装饰器被调用了') 
		print('请求路径%s' % request.path) 
		return func(request, *args, **kwargs) 
	return wrapper 



class DemoView(View): 
	def get(self, request): 
		print('get方法') 
		return HttpResponse('ok') 

	def post(self, request): 
		print('post方法') 
		return HttpResponse('ok')

使用以下两种方法。

2.在url配置中装饰

urlpatterns = [ 
	url(r'^demo/$', my_decorate(DemoView.as_view())) 
	]

这种方式较为简单,但是因为装饰行为被放置到了url配置中,单看视图的话无法知道此视图还被添加了装饰器,不利于代码的完整性,不建议使用。并且,这种方式会为类视图中的所有请求方法都加上装饰器行为(因为是在视图入口处,也就是分发请求方式前)。

3.在类视图中装饰

在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器,需要用method_decorator将其转换为适用于类视图方法的装饰器。

提示:使用语法糖的方式为类视图添加装饰器?需要导包 from django.utils.decorators import method_decorator

method_decorator装饰器使用name参数指明被装饰的方法

# 为全部请求方法添加装饰器 
@method_decorator(my_decorator, name='dispatch') 
class DemoView(View): 
	def get(self, request): 
		print('get方法') 
		return HttpResponse('ok') 

	def post(self, request): 
		print('post方法') 
		return HttpResponse('ok')




# 为特定请求方法添加装饰器 
@method_decorator(my_decorator, name='get') 
class DemoView(View): 
	def get(self, request): 
		print('get方法') 
		return HttpResponse('ok') 


	def post(self, request): 
		print('post方法') 
		return HttpResponse('ok')

如果需要为类视图的多个方法添加装饰器,但又不是所有方法,可以直接在需要添加装饰器的方法上使用method_decorator,如下:

from django.utils.decorators import method_decorator 

# 为特定请求方法添加装饰器 
class DemoView(View): 

	@method_decorator(my_decorator) 
	# 为get方法添加了装饰器 
	def get(self, request): 
		print('get方法') 
		return HttpResponse('ok') 

	@method_decorator(my_decorator) 
	# 为post方法添加了装饰器 
	def post(self, request): 
		print('post方法') 
		return HttpResponse('ok') 

	def put(self, request): 
	# 没有为put方法添加装饰器 
		print('put方法') 
		return HttpResponse('ok')

总结

Django类视图到这里我们就讲完啦!!!!👍👍👍 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦👏👏👏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100729.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!