标签:取出 状态 装饰器 one 添加 登录 伪造 callback 执行
昨日回顾:
	cookie:
		-是什么?存储在客户端浏览器上的键值对
		-干啥用的?记录状态
		-django中使用:
			-设置值:
				-HttpResponse对象,obj.set_cookie(key,value,超时时间)
				-JsonResponse也可以用
			-取值
				request.COOKIES  字典,然后把要取的值取出来,推荐用get
			-删除值
				-HttpResponse对象,obj.delete_cookie(‘key‘),从客户浏览器中删除
		-其他一些属性:
			-加盐的cookie
			-超时时间
			-路径:如果是根路径,说明,以后所有的请求,都会携带cookie过来
			-域:在某个域下有效
	session:
		-是什么?存在服务器上的键值对:key是一个随机字符串,value是个字典
		-有什么作用:安全性,客户端浏览器不再存储敏感信息
		-django中使用:
			-设置值
				-request.session[‘name‘]=lqz
				-1 生成一个随机字符串
				-2 存到数据库 随机字符串     {‘name‘:lqz}
				-3 向cookie中写入:sessionid  随机字符串
				
				-如果:再设置一次值
					request.session[‘age‘]=18
					只在随机字符串对应的字典内部添加,{‘name‘:lqz,‘age‘:18}
			-取值
				-request.session.get(‘name‘)
				-先取出cooki中的随机字符串
				-取数据库根据随机字符串查询,拿到data的值
				-从字典中取出name对应的值
				
			-删除值
				-request.session.delete()------>只是删除数据库的内容
				-request.session.flush()------>删除数据库的内容,又删除浏览器的cookie
				
			-其他的属性:
				-默认session存在数据库,可以存在缓存,文件
				-超时时间
				-路径:如果是根路径,说明,以后所有的请求,都会携带cookie过来
				-域:在某个域下有效
				-其他的
				
今日内容:
	cbv加装饰器
		-先导入:from django.utils.decorators import method_decorator
		-1 可以在方法上加装饰器:
			@method_decorator(login_auth)
		-2 可以在类上加
			@method_decorator(login_auth,name=‘post‘)
			@method_decorator(login_auth,name=‘get‘)
		-3 可以加在dishpatch方法上
			@method_decorator(login_auth)
			一旦加在dishpatch,说明,所有方法都加了装饰器
			
	中间件
		-中间件是什么?请求和响应之间的一道屏障
		-中间件作用:控制请求和响应
		-django中内置几个中间件
		-自定义中间件
			-from django.utils.deprecation import MiddlewareMixin   先导入
			-定义一个类,随意命名,继承MiddlewareMixin
			class MyMiddleware1(MiddlewareMixin):
				def process_request(self, request):
					print(‘MyMiddleware---->1---->process_request‘)
					# 返回HttpRspons对象,直接返回,走自己的process_response
					# 返回None的时候,继续往下走
					# return HttpResponse(‘i am middle--1‘)
					return None
def process_response(self, request, response):
					print(‘MyMiddleware--->1---->process_response‘)
					return response
			-使用:在setting中注册,是有顺序的,
				MIDDLEWARE = [
				‘app01.mymiddelware.MyMiddleware1‘,
				]
			
		-中间件执行顺序:
			-process_request,从上往下执行
				-如果retrun HttpResponse的对象,直接返回了
				-如果retrun None ,继续往下走
			-process_response,从下往上执行
				-必须要retrun Httpresponse的对象
		-中间件的方法:()
			-process_request
				-请求来的时候,会响应它
			-process_response
				-响应回去的时候,会走它
			-process_view(了解)
				- request, callback(视图函数), callback_args(无名分组的参数), callback_kwargs(有名分组的参数)
				-执行顺序,详见图
			-def process_exception(self, request, exception)(了解)
			-def process_template_response(self, request, response):(了解)
	csrf:跨站请求伪造	
		比如:转账请求:transfer?to=lqz&count=1000
		-是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
		-如何防范:
			-通过refer
			-加一个随机字符串校验(加载请求的路径里,加载请求体中)
			-在请求头中加字符串校验
		django中的应用:
			-中间件不注释掉
			-以后再发post请求,携带那个随机字符串
				-form表单形式:
					<form action="" method="post">
						{% csrf_token %}
						<input type="text" name="name">
						<input type="text" name="pwd">
						<input type="submit" value="提交">
					</form>
				-ajax提交
				data: {
					‘name‘: $(‘[name="name"]‘).val(),
					‘pwd‘: $(‘[name="pwd"]‘).val(),
					//‘csrfmiddlewaretoken‘: $(‘[name="csrfmiddlewaretoken"]‘).val()
					‘csrfmiddlewaretoken‘: ‘{{ csrf_token }}‘
					},
		csrf:局部禁用,局部使用
			-用装饰器:from django.views.decorators.csrf import csrf_exempt,csrf_protect
			-fbv--->直接加载fbv上就行了
				-局部禁用,全局得使用
				 @csrf_exempt
				 def csrf_disable(request):
				         print(request.POST)
				         return HttpResponse(‘ok‘)
				-局部使用,全局得禁用
				 @csrf_protect
				 def csrf_disable(request):
				         print(request.POST)
				         return HttpResponse(‘ok‘)
			-cbv-->只能加在dispatch方法或者类上面
				-局部禁用,全局得使用
				-局部使用,全局得禁用
				from django.views import View
				from django.utils.decorators import method_decorator
				@method_decorator(csrf_protect,name=‘dispatch‘)
				class Csrf_disable(View):
					# @method_decorator(csrf_protect)
					def dispatch(self, request, *args, **kwargs):
						ret=super().dispatch(request, *args, **kwargs)
						return ret
					def get(self,request):
						return HttpResponse(‘ok‘)
					def post(self,request):
						return HttpResponse(‘post---ok‘)
						
作业:
	1 登录认证,写在中间件中(只有登录的请求不需要登录以后操作,其他请求,都必须登录以后操作)
		
	2 写一个频率控制的中间件(任意用户,一分钟只能访问3次)应用上csrf
		-思路:
			-当前访问的ip地址取出来
			-存一个临时变量{ip:[时间1,时间2,时间3]}
		
		
	
				
				
				
				
标签:取出 状态 装饰器 one 添加 登录 伪造 callback 执行
原文地址:https://www.cnblogs.com/fushaunglin/p/10010473.html