Cookie/Session

Cookie

  • Cookie以键值对的格式进行信息的存储。

Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息。

当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。

  • 设置Cookie

    • HttpResponse对象中的set_cookie方法来设置cookie。
    • HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
  • 读取Cookie
    • 可以通过HttpRequest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。

Session

  • 存储方式

    • settings.py文件中,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。
    • 在redis中保存session,需要引入第三方扩展,我们可以使用django-redis来解决。
    • 安装扩展
      • pip install django-redis
    • 配置
      • 在settings.py文件中
  • Session操作
    • 以键值对的格式写session。

      • request.session['键']=值
    • 根据键读取值。
      • request.session.get('键',默认值)
    • 清除所有session
      • 在存储中删除值部分。
      • request.session.clear()
    • 清除session数据
      • 在存储中删除session的整条数据。
      • request.session.flush()
    • 删除session中的指定键及值
      • del request.session['键']
    • 设置session的有效期
      • request.session.set_expiry(value)

类视图

以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。

from django.views.generic import View

class RegisterView(View):

"""类视图:处理注册"""

def get(self, request):

    """处理GET请求,返回注册页面"""

    return render(request, 'register.html')

def post(self, request):

    """处理POST请求,实现注册逻辑"""

    return HttpResponse('这里实现注册逻辑')

定义类视图需要继承自Django提供的父类View,配置路由时,使用类视图的as_view()方法来添加

类视图使用装饰器

  • 在URL配置中装饰

    • 此种方式会为类视图中的所有请求方法都加上装饰器行为
  • 在类视图中装饰
    • method_decorator装饰器使用name参数指明被装饰的方法
    • 可以直接在需要添加装饰器的方法上使用method_decorator

类视图Mixin扩展类

  • 使用面向对象多继承的特性,可以通过定义父类(作为扩展类)

中间件

定义方法

  • 定义一个中间件工厂函数,然后返回一个可以别调用的中间件。

    def simple_middleware(get_response):

    此处编写的代码仅在Django第一次配置和初始化的时候执行一次。

    def middleware(request):

      # 此处编写的代码会在每个请求处理视图前被调用。
    
      response = get_response(request)
    
      # 此处编写的代码会在每个请求处理视图之后被调用。
    
      return response

    return middleware

定义好中间件后,需要在settings.py 文件中添加注册中间件

多个中间件的执行顺序

  • 在请求视图被处理前,中间件由上至下依次执行

在请求视图被处理后,中间件由下至上依次执行

数据库

使用MySQL数据库首先需要安装驱动程序

  • pip install PyMySQL

在Django的工程同名子目录的__init__.py文件中添加

  • from pymysql import install_as_MySQLdb

告诉django数据库发生改变

install_as_MySQLdb()

  • 作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。

修改DATABASES配置信息

MySQL中创建数据库

从零到Django大牛的的进阶之路02的更多相关文章

  1. 从零到Django大牛的的进阶之路01

    搭建 创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 安装Django pip install django==1.11.11 创建工程 django-a ...

  2. PHP进阶之路 -- 02 面向对象

    PHP进阶之路-- 之 “面向对象” 基础 概念 类的介绍和定义 类的属性 类常量 类的自动加载 构造函数和析构函数 访问控制 对象继承 范围解析操作符 static静态关键字 抽象类 对象接口 Tr ...

  3. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

  4. Django学习笔记(进阶篇)

    Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html

  5. JavaScript进阶之路(一)初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  6. GO语言的进阶之路-初探GO语言

    GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难 ...

  7. GO语言的进阶之路-网络安全之proxy

    GO语言的进阶之路-网络安全之proxy 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在党的带领下,我们大陆的孩子身心健康还是杠杠的,尤其是像我这种农村孩纸,从来不会像<人 ...

  8. GO语言的进阶之路-协程和Channel

    GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...

  9. GO语言的进阶之路-面向对象编程

    GO语言的进阶之路-面向对象编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当你看完这篇文章之时,我可以说你的Golang算是入门了,何为入门?就是你去看Docker 源码能看 ...

随机推荐

  1. STM32cubeMX安装FW_F4容易出错失败的解决办法

    在CUBEMXV5.30安装F4的支持包V1.241的反复失败,无法自动生成代码.后来发现了一种办法: 在stm32的官网下载V1.24.0和en.patch_cubefw_f4.zip(V1.24. ...

  2. i.MX RT600之I2S外设介绍及应用

    恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...

  3. 5种JVM调优配置方法概览

    1 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年 ...

  4. mac 终端连接服务器报错

    今天在连接虚拟机服务器时突然报了一个 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!的错误.  会出现这个错误的原因是在第一次进行SSH连接时,会生 ...

  5. 模拟服务容器Ioc

    服务容器是一个用于管理类依赖和执行依赖注入的强大工具. 一个类要被容器所能够提取,必须要先注册至这个容器.既然称这个容器叫做服务容器,那么我们需要某个服务,就得先注册.绑定这个服务到容器,那么提供服务 ...

  6. Java中四种遍历Map对象的方法

    方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...

  7. sprintf 、vsprintf 、_vsntprintf

    转载:https://blog.csdn.net/anye3000/article/details/6593551 sprintf函数的定义为: int sprintf(char *szBuffer, ...

  8. luogu P2774 方格取数问题

    有限制的问题,显然考虑全选再根据限制去掉的想法较优,我们发现一个点四周的点受限,其x或者y差一,也就是说奇偶性不同,那我们可以将其分成白点和黑点,就变成了最小割的问题,将每个白点向受限制的黑点连边,c ...

  9. [Linux] day01——运维

    开发和运维,本质都是提供一种服务. ---------------------------------(最终用户)1 应用2 中间件 服务平台 存储 架构 3 操作系统 硬件驱动4 计算机 网络设备 ...

  10. 排序--选择排序Selection Sort Java实现

    基本原理 选择排序的简单原理:选择排序算法通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行排序. 将数组两个子数组: 已排序子数组 未排序子数组 选择排序中每次循环都会从未排序子 ...