zoukankan      html  css  js  c++  java
  • 从零到Django大牛的的进阶之路02

    Cookie/Session

    • 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中创建数据库

  • 相关阅读:
    wepy根据下标对数组中的某个对象的元素进行赋值
    wepy中的this.$apply()在什么时候使用
    wepy的安装与卸载
    vue-cli4.0更新后怎样将eslint关闭
    vue报错error 'projectName' is defined but never used no-unused-vars
    js数组对象去重(同时判断对象中的每一个属性,若其对应的属性值都相同,则去重)
    数字金额变为大写
    通过navigator.userAgent判断浏览器类型
    js获取iframe中的元素以及在iframe中获取父级的元素(包括iframe中不存在name和id的情况)
    html转成pdf,下载(html2canvas 和 jsPDF)
  • 原文地址:https://www.cnblogs.com/xuchuankun/p/9757823.html
Copyright © 2011-2022 走看看