HttpRequest

服务器在接收到Http请求后,会根据报文创建HttpRequest对象
视图中的第一一个 参数就是HttpRequest对象
Django框架会进行自己的包装,之后传递给视图

属性

  • path 请求的完整路径
  • method 请求的方法,常用GET,POST
  • encoding 编码方式,常用utf-8
  • GET 类似字典的参数,但是一个key可以有多个值,包含了get的所有参数
    • ​ 通常有get()获取一个,getlist()获取多个
  • POST 类似字典的参数,包含了post所有参数
  • FILES 类似字典的参数,包含了上传的文件
  • COOKIES 字典,包含了所有COOKIE
  • session 类似字典,表示会话
  • META 各种客户端元信息

方法(部分)

  • is_ ajax() 判断是否是ajax(),通常用在移动端和js中

HttpResponse

服务器返回给客户端的数据

HttpResponse由程序猿自己创建

  • 不使用模板,直接HttpResponse()

  • 调用模板,进行渲染

    • 先load模板,再渲染

    • 直接使用render一步到位

      • render(request,template_ name[,context])
        • request 请求体对象
        • template_ name 模板路径
        • context 字典参数,用来填坑

属性

方法(部分)

  • init 初始化内容
  • write(xxx) 直接写出文本
  • flush()冲刷缓冲区
  • set_cookie(key,value= xxx ,max age=None,exprise=None)
  • delete cookie(key) 删除cookie, 上面那个是设置

HttpResponse子类

HttpResponseRedirect

也可以通过导包简写成redirect

响应重定向:可以实现服务器内部跳转
return Http.ResponseRedict(/grade/2017')

使用的时候推荐使用反向解析

JsonResponse

返回Json数据的请求,通常用在异步请求上

​ JsonResponse. ( dict )
也可以使用_ init (self.data) 设置数据

Content-type自动设置为application/json

其他(部分)

  • HttpResponsePermanentRedirect
    • 重定向,永久性
    • 301
  • HttpResponseBadRequest
    • 400
  • HttpResponseNotFound
    • 404
  • HttpResponseForbidden
    • 403
  • HttpResponseNotAllowed
    • 405
  • HttpResponseServerError
    • 500
  • Http404
    • Exception
    • raise 主动抛异常出来

会话技术

摘要

  • 出现场景
    • 服务器如何识别客户端
    • Http在Web开发中基本都是短连接
  • 请求生命周期
    • 从Request开始
    • 到Response结束
  • 种类
    • Cookie
      • 客户端会话技术
        • 数据存储在客户端
      • 键值对存储
      • 支持过期时间
      • 默认Cookie会自动携带,本网站所有Cookie
      • Cookie不能跨域名,跨网站
      • 通过HttpResponse
      • Cookie默认不支持中文
      • 可以加盐
        • 加密
        • 获取的时候需要解密
    • Session
      • 服务端会话技术
      • 数据存储在服务器中
      • 默认Session存储在内存中
      • Django中默认会把Session持久化到数据库中
      • Django中Session的默认过期时间是14天
      • 主键是字符串
      • 数据是使用了数据安全
        • 使用的base64
        • 在前部添加了一个混淆串
      • Session依赖于Cookie
    • Token
      • 服务端会话技术
      • 自定义的Session
      • 如果Web页面开发中,使用起来和Session基本一致
      • 如果使用在移动端或客户端开发中,通常以Json形式传输,需要移动端自己存储Token,需要获取Token关联数据的时候,主动传递Token
    • Cookie和Session,Token对比
      • Cookie使用更简洁,服务器压力更小,数据不是很安全
      • Session服务器要维护Session,相对安全
      • Token拥有Session的所有优点,自己维护略微麻烦,支持更多的终端

浏览器端的会话技术

cookie本身由浏览器生成,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来

response.set_cookie(key,value[,max_age=None,exprise=None])
request.GET.get(key,defaultvalue)

cookie不能跨浏览器

response.set_cookie(key,value,max_age=None,exprise=None)

max_age: 整数,指定cookie过期时间

expries : 整数,指定过期时间,还支持是一个datetime或 timedelta,可以指定一个具体日期时间

max_ageexpries两个选一个指定

过期时间的几个关键时间

max_age 设置为 0 浏览器关闭失效

设置为None永不过期

expires=timedelta(days=10) 10天后过期

8NTTII.png

Session

服务器端会话技术,依赖于cookie

django中启用SESSION

settings中

  • INSTALLED_APPS:

    'django.contrib.sessions'

  • MIDDLEWARE:

    'django.contrib.sessions.middleware.SessionMiddleware'

每个HttpRequest对象都有一个session属性,也是一个类字典对象

常用操作

  • get(key,default=None)根据键获取会话的值

  • clear() 清除所有会话

  • flush() 删除当前的会话数据并删除会话的cookie

  • del request.session['xxx']删除会话

  • session.session_key获取session的key

    设置数据

    request.session[‘user’] = username

    数据存储到数据库中会进行编码使用的是Base64

8NTvLQ.png

CSRF

  • 防跨站攻击
  • 防止恶意注册,确保客户端是我们自己的客户端
  • 使用了cookie中csrftoken 进行验证,传输
  • 服务器发送给客户端,客户端将cookie获取过来,还要进行 编码转换 (数据安全)
  • 添加{ % csrf_token % }即可
  • 如何实现的
    • 在我们 存在csrf_token 标签的页面中,响应会自动设置一个cookie, csrftoken
    • 当我们提交的时候,会自动验证csrftoken
    • 验证通过,正常执行以后流程,验证不通过,直接403

算法

  • 编码解码
    • Base64
    • urlencode
  • 摘要算法,指纹算法,杂凑算法
    • MD5,SHA
      • MD5 默认是128的二进制
      • 32位的十六进制
      • 32位的Unicode
    • 单向不可逆的
    • 不管输出多长,输出都是固定长度
    • 只要输入有任意的变更,输出都会发生巨大的变化
  • 加密
    • 对称加密
      • 一把钥匙
      • DES,AES
      • 加密解密效率高
      • 钥匙一旦丢失,所有数据就全玩完了
    • 非对称加密
      • 两把钥匙,成对的
      • 公钥和私钥
      • RSA,PGP
      • 安全性最高
      • 算法复杂,需要时间长
      • 支付宝,微信都是RSA

思维导图

![1YVf29 ](https://gitee.com/Kinmfer/BlogImages/raw/master/img/1YVf29 .png)