昨日回顾

昨日回顾:
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过来
-域:在某个域下有效
-其他的

今日内容

  1.什么是中间件?

    中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

    作用:可以控制请求和响应

    django中内置有几个中间件

    自定义一个中间件

# 自定义中间件
class FirstMyMid(MiddlewareMixin):
# 请求过来时,中间响应的方法
def process_request(self, request):
print('----' * 50)
print('this is request')
# 如果 return 一个HttpResponse那么将直接从这个中间件开始往浏览器端返回(跳过后面所有的过程)
# 如果 return 一个None那么将会往下一个中间件继续传递。
# return HttpResponse('Is MyMid')
# return 'asd' #出错,源码判断 is Not None 就返回 response # 请求回去时,中间响应的方法
def process_response(self, request, response):
print('----' * 50)
print('this is response')
return response # 经过路由控制来到process_view 可以获取到本次请求的视图函数地址
def process_view(self, request, view_func, view_args, view_kwargs):
print('----' * 50)
# res = view_func(request)
print('view_func:', view_func)
print('view_args:', view_args)
print('view_kwargs', view_kwargs) # 一旦视图函数报错这里的exception可以接收到错误信息(执行完视图函数之后才会执行该函数)
def process_exception(self, request, exception):
return HttpResponse(exception)
定义过程:
1.-from django.utils.deprecation import MiddlewareMixin 先导入
2.-定义一个类,随意命名,继承MiddlewareMixin
def process_request(self, request):(-请求来的时候,会响应它)
def process_response(self, request, response):(-响应回去的时候,会走它)
3.在在setting中注册,是有顺序的
MIDDLEWARE = [
'app01.mymiddelware.MyMiddleware1',
]

  

  def process_view(self, request, view_func, view_args, view_kwargs):

  当最后一个中间的process_request到达路由关系映射之后,返回到中间件1的process_view,然后依次往下,到达views函数,最后通过process_response依次返回到达用户。

    -def process_exception(self, request, exception)

    

    -def process_template_response(self, request, response):

      该方法对视图函数返回值有要求,必须是一个含有render方法类的对象,才会执行此方法

class Test:
def __init__(self,status,msg):
self.status=status
self.msg=msg
def render(self):
import json
dic={'status':self.status,'msg':self.msg} return HttpResponse(json.dumps(dic))
def index(response):
return Test(True,'测试')

  csrf:跨站请求伪造 
      比如:转账请求:transfer?to=lqz&count=1000
      -是什么?攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
      -如何防范:
         -通过refer
         -加一个随机字符串校验(加载请求的路径里,加载请求体中)
         -在请求头中加字符串校验
  django中的应用:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
<script src="/static/jquery-3.3.1.js"></script>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<input type="text" name="name">
<input type="text" name="pwd"> </form>
<input type="button" value="登陆" id="btn">
</body>
<script>
$('#btn').click(function () {
$.ajax({
url: '/index/',
type: 'post',
data: {
'name': $('[name="name"]').val(),
'pwd': $('[name="pwd"]').val(),
'csrfmiddlewaretoken': '{{ csrf_token }}',
{#'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()#}
},
success:function (data) {
alert(data)
}
})
})
</script>
</html>

导入

from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.views import View
from django.utils.decorators import method_decorator

全站禁用:注释掉中间件 'django.middleware.csrf.CsrfViewMiddleware',

局部禁用:用装饰器(在FBV中使用)

CBV

@method_decorator(csrf_exempt, name='dispatch')
class index(View):
def get(self, request):
if request.GET.get('next'):
return render(request, 'index.html')
return render(request, 'index.html') def post(self, request):
name = request.POST.get('name')
pwd = request.POST.get('pwd')
if name == 'yxf' and pwd == '':
return HttpResponse('登陆成功')
return HttpResponse('登陆失败')

day79的更多相关文章

  1. python 全栈开发,Day79(Django的用户认证组件,分页器)

    一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...

  2. 鼠标滚轮实现图片的缩放-------Day79

    今天是7月的最后一天了,不得不说,我定下的七月份剩余几天的计划是完不成了.一则工作确实紧了些,再则没能处理好生活.工作和学习的节奏.这才是人生最大的课题吧.只是也还好.至少自己还在坚持着.事实上真的越 ...

  3. day79 组件化开发

    目录 一.组件[component] 默认组件 二. Vue自动化工具(Vue-cli) 1 安装node.js 2 npm 3 安装Vue-cli 4 使用Vue-CLI初始化创建前端项目 4.1 ...

  4. day79:luffy:注册之对手机号的验证&实现基本的注册功能逻辑&点击获取验证码&redis

    目录 1.前端和后端对于手机号的验证 2.实现基本的注册功能-不包括验证码 3.点击获取验证码 4.解决登录不上Xadmin的bug 5.redis register.vue页面 <templa ...

  5. Python面向对象之属性

    属性的定义和调用 1,定义时,在普通方法的基础上添加@property装饰器 2,定义时,属性仅有一个self参数 3,调用时,无需括号 vim day7-8.py #!/usr/bin/python ...

  6. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  7. 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)

    点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天) 课程大纲 1.这一期比之前的Python培新课程增加了很多干货:Linux ...

  8. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  9. 22期老男孩Ptython全栈架构师视频教程

    老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...

随机推荐

  1. Struts 2(二)

    一,框架的扩展名问题: ,struts2框架的默认扩展名:.action和空字符串.在框架的属性文件default.properties中进行默认配置:struts.action.extension= ...

  2. Windows上PostGIS(压缩版)安装

    PostGIS安装 1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/win ...

  3. 完美的nginx图片防盗链设置详解

    一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通过浏览器直接输入图片地址,仍然会显示图片,仍然可以右键图片另存为下载文件!依然可以下载?这样就不是彻底的防盗链了! [r ...

  4. redis学习历程

    redis只知道作用于缓存,其它一无所知,所以现在系统的 学习下,这样应用的时候可以考虑多面性和实用性 首先先了解一下redis的背景和概念 背景 Redis是一个开源的使用ANSI C语言编写.支持 ...

  5. 在IE中,JS方法名和input的name重名时,调用该方法无效

    在IE中,JS方法名和input的name重名时,调用该方法无效.提示:网页错误详细信息 用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1 ...

  6. C# 实现 JAVA AES加密解密[原创]

    以下是网上普遍能收到的JAVA AES加密解密方法. 因为里面用到了KeyGenerator 和 SecureRandom,但是.NET 里面没有这2个类.无法使用安全随机数生成KEY. 我们在接收J ...

  7. python常用内置模块

    #持续更新 #在使用内置模块的时候需要导入,例如import abc,则导入abc模块,当然模块也可以自己写,相当于一个类,后面放到类里说,这个因为环境闲置,有些无法执行,只能理解了 #os系统操作 ...

  8. python下以api形式调用tesseract识别图片验证码

    一.背景 之前在博文中介绍在python中如何调用tesseract ocr引擎,当时主要介绍了shell模式,shell模式需要安装tesseract程序,并且效率相对略低. 今天介绍api形式的调 ...

  9. Innodb存储引擎的缓存命中率计算

    数据库的慢查询是我们在生产环境中必须经常检测的,如果慢查询语句过多,说明我们应该增加buffer_pool的大小了.常常检查的指标就是查看缓存命中率是否过低. mysql> show statu ...

  10. sql点滴—mysql中查询表的信息

    mysql中查询表的信息 查询mysql表字段信息的sql语句 SHOW DATABASES //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name] //列 ...