基于中间件思想编写项目

1 > csrf相关装饰器


	from django.views.decorators.csrf import csrf_exempt,csrf_protect
	"""
	csrf_exempt 
	    忽略csrf校验
	    
	csrf_protect
	    开启csrf校验
	"""

1.1 > 针对FBV

   针对FBV添加装饰器有以下两种方式


	@csrf_protect\@csrf_exempt
	def login(request):
    	return render(request,'login.html')
	
	'''
		可以直接给方法添加装饰器并且都是有效的
	'''
	

1.2 > 针对CBV

   针对CBV添加装饰器:
   csrf_protect 三种CBV添加装饰器的方式都可以
   csrf_exempt 只有一种方式可以生效(给重写的dispatch方法装)


	开启校验 @csrf_protect
	
		# @method_decorator(csrf_protect name='post')			方式二: 有效
		class MyView(views.View):
		
		# @method_decorator(csrf_protect)							方式三: 有效
	   	def dispatch(self, request, *args, **kwargs):			
        	return super(MyView, self).dispatch(request, *args, **kwargs)
        	
	    # @method_decorator(csrf_protect)			方式一: 有效
	    def post(self, request):
	        return HttpResponse('from MyView post')
		

	关闭校验 @csrf_exempt
			
		# @method_decorator(csrf_exempt name='post')			方式二: 无效
		class MyView(views.View):
		
		# @method_decorator(csrf_exempt)						方式三有效
	   	def dispatch(self, request, *args, **kwargs):			
        	super(MyView, self).dispatch(request, *args, **kwargs)
        	
	    # @method_decorator(csrf_exempt)			方式一: 无效
	    def post(self, request):
	        return HttpResponse('from MyView post')	
	        

2 > 基于中间件思想编写项目

2.1 > importlib模块

   该模块可以通过字符串的形式导入模块


	常规导入方式:
		from ccc import b
		print(b)  # <module 'ccc.b' from '/Users/jiboyuan/PycharmProjects/day61_1/ccc/b.py'>
		print(b.name)	

	字符串导入方式
		import importlib
		module_path = 'ccc.b'
		res = importlib.import_module(module_path)
		print(res.name)
	
	'''
	
		from ccc.b import name  # 可以直接导变量数据


		import importlib
		module_path = 'ccc.b.name'
		importlib.import_module(module_path)  # 不可以 最小导入单位是模块文件级别

	'''

2.2 > 以发送提示信息为需求 编写功能


	方式1:封装成函数

	方式2:封装成配置
	import settings
	import importlib
	def send_all(msg):
	    # 1.循环获取配置文件中字符串信息
	    for str_path in settings.NOTIFY_FUNC_LIST:  # 'notify.email.Email'
	        # 2.切割路径信息
	        module_path, class_str_name = str_path.rsplit('.', maxsplit=1)  # ['notify.email','Email']
	        # 3.根据module_path导入模块文件
	        module = importlib.import_module(module_path)
	        # 4.利用反射获取模块文件中对应的类名
	        class_name = getattr(module, class_str_name)  # Email  Msg  QQ
	        # 5.实例化
	        obj = class_name()
	        # 6.调用发送消息的功能
	        obj.send(msg)

3 > auth认证模块


	# django提供给你快速完成用户相关功能的模块
		用户相关功能:创建、认证、编辑...
		
	# django也配套提供了一张'用户表'
		执行数据库迁移命令之后默认产生的auth_user
		
	# django自带的admin后台管理用户登录参考的就是auth_user表
		创建admin后台管理员用户:run manage.py task>>:createsuperuser
	  自动对用户密码进行加密处理并保存

在这里插入图片描述
在这里插入图片描述

3.1 > auth模块方法大全

   1.验证用户名和密码是否正确

	
	auth.authenticate()

   2.保存用户登录状态

	
	auth.login()

	'''
		auth.login(request, user_obj)		# 自动帮你操做session表保存数据
	'''

   3.获取当前登录用户对象

	
	request.user

   4.判断当前用户是否登录

	
	request.user.is_active				登录为True
	request.user.is_authenticated()
	

   5.校验登录装饰器

	
	from django.contrib.auth.decorators import login_required
	@login_required(login_url='/lg/')  # 局部配置
	
	@login_required  # 全局配置
	LOGIN_URL = '/lg/'  # 需要在配置文件settings中添加配置

   6.修改密码

	
	request.user.check_password() 	# 自动加密再比对密码
  
	request.user.set_password()		# 临时修改密码
	request.user.save()				# 将修改后数据同步到数据库

   7.注销登录

	
	auth.logout(request)

   8.注册用户

	
	from django.contrib.auth.models import User
	User.objects.create_superuser()
	User.objects.create_suser()
	

3.2 > auth扩展表字段

	
	# 方式1:编写一对一表关系(了解)
	# 方式2:类继承(推荐)
	from django.contrib.auth.models import AbstractUser
	class Users(AbstractUser):
	    # 编写AbstractUser类中没有的字段 不能冲突!!!
	    phone = models.BigIntegerField()
	    addr = models.CharField(max_length=32)
	
	AUTH_USER_MODEL = 'app01.Users'					# 配置文件中加配置
	"""
	1.类继承之后 需要重新执行数据库迁移命令 并且库里面是第一次操作才可以
	2.auth模块所有的方法都可以直接在自定义模型类上面使用
		自动切换参照表
	"""


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值