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. c#活动目录操作

    c#活动目录操作  https://www.cnblogs.com/ahuo/archive/2007/03/16/676853.html 添加引用 System.DirectoryServices导 ...

  2. Python之字符(2)

    1.string.issupper()表示判断字符是否全部为小写字母. string1 = "abcdef" string2 = "ABCdef" string ...

  3. Windows Server 2008 R2文件服务器升级到Windows Server 2016

    Windows Server 2008 R2文件服务器升级到Windows Server 2016 用户单位有2台Windows Server 2008 R2的文件服务器,已经加入到域.域服务器另有两 ...

  4. 文本输入框UITextField和UITextView

    本文概要 1.简介 2.介绍TextField控件 3.介绍TextView控件 4.键盘的打开和关闭 5.关闭和大开键盘的通知 6.键盘的种类 详情 1.简介 与Label一样,TextField和 ...

  5. javaweb使用button的onclick属性访问servlet

    1.定义一个servlet: 如我定义了一个名称为Choose_class.java的servlet 2.定义一个button <input type="button"  v ...

  6. [转]轻松理解AOP思想(面向切面编程)

    原文链接 Spring是什么 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,S ...

  7. Beautisoup库

    所看视频: https://www.bilibili.com/video/av9784617/?p=34 一, Beautifulsoup是一个可以从HTML或XML文件中提取数据的Python库,它 ...

  8. Codeforces Round #551 (Div. 2)D(树形DP)

    #define HAVE_STRUCT_TIMESPEC#include <bits/stdc++.h>using namespace std;int val[300007],num[30 ...

  9. 从Facebook、苹果到外卖平台,“阴谋论”推动巨头企业不断蜕变

    不可否认的是,在互联网向前加速推进的过程中,巨头企业和独角兽扮演着重要角色.它们以多元创意和深厚技术.资金实力,一步步改造着大众的互联网生活.而在此前,人们对巨头企业.独角兽的态度是颇为依赖的.但自从 ...

  10. 好用的log打印类

    package com.huawei.network.ott.weixin.util; import android.util.Log; public final class DebugLog { / ...