昨日回顾

昨日回顾:
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. JavaScript--表单处理(27)

    一 表单介绍 // 在HTML中,表单是由<form>元素来表示的,而在JavaScript中,表单对应的则是HTMLFormElement类型; // HTMLFormElement继承 ...

  2. ERP、CRM、CMS

    ERP: 全称:Enterprise Resource Planning 解释:企业资源计划. ERP 是一种主要面向制造行业进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统.ERP ...

  3. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)

    题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时 ...

  4. 为什么main方法是public static void?

    Main方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么main方法是public.static.void的.当然,很多人首先学的是C和C++,但是在Java中main方法与前者 ...

  5. CSS中的三种常用定位

    一.相对定位(position:relative) 如果想让一个元素在本来的位置进行一个位移,可以将该元素的定位设置为relative,同时指定相对位移(利用top,bottom,left,right ...

  6. [Android] 压缩图片并保存

    不难,但用的时候有时候突然会想不起来..记录一下吧 原文地址请保留http://www.cnblogs.com/rossoneri/p/3995096.html 先加权限 <uses-permi ...

  7. ASP.NET Core 依赖注入最佳实践——提示与技巧

    在这篇文章,我将分享一些在ASP.NET Core程序中使用依赖注入的个人经验和建议.这些原则背后的动机如下: 高效地设计服务和它们的依赖. 预防多线程问题. 预防内存泄漏. 预防潜在的BUG. 这篇 ...

  8. iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题

    一.JS CSS 自动压缩问题 默认情况下mvc这个框架会把css,js文件压缩成一个js或者css文件,一会发现只有一个<link href="/Content/css?v=ji3n ...

  9. NPOI 导出Excel 数据方式

    使用NPOI的库进行Excel导出操作 公共帮助类: using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System; using S ...

  10. Ctrl+Alt+F1~F6

    Ctrl+ALT+F1~F6 可以进入不同的字符终端和图形界面.体现了 linux 或者 unix 的多用户的特点. 6个不同的终端,相当于六个不同的用户. 保持更新,转载请著名出处.