Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存

这篇具有很好参考价值的文章主要介绍了Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

day04 django进阶-知识点

今日概要:

  • 模板
  • 中间件
  • ORM操作(pymysql + SQL语句)
  • session和cookie
  • 缓存(很多种方式)

内容回顾

  • 请求周期

    • 路由系统

      • 最基本路由关系
      • 动态路由(含正则)
      • 路由分发不同的app中 + include + 本质 + name + namespace
    • 视图

      • 类和函数(FBV和CBV)

      • 参数 request

        • 请求数据
        • 自定义数据
      • 响应

        HttpResponse/JsonResponse/render/redirect
        return HttpResponse("...")
        
        响应头
        obj = HttpResponse("...")
        obj['xxxxx'] = "值"
        return obj
        
  • 其他知识

    • 虚拟环境

    • 纯净版项目,内置app功能去掉。

    • 多app,嵌套到apps目录。

    • pycharm创建django项目 + 虚拟环境

      • 最新的django项目
      • 低版本(环境+项目+django文件模板)
    • settings配置

      django默认settings [先加载] 500
      项目目录settings    [后加载] 20
      
    • 静态资源

      • 静态文件,项目必备【项目根目录,每个app目录下static - app注册顺序】
      • 媒体文件,用户上传

1.模板

1.1 寻找html模板

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                # 'django.contrib.auth.context_processors.auth',
                # 'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

优先去项目根目录 > 每个已注册的app的templates目录找。

如何选择:

  • 简单的项目,模板都放在根目录。
  • 复杂的项目,模板放在各自的app中,公共部分放在templates目录。

扩展:修改内置app的模板也是同样的套路。

1.2 模板处理的本质

渲染完成后,生成了字符串,再返回给浏览器。

打开文件读取 里面的内容 返回浏览器

渲染完成得到一个渲染完成的字符串

把渲染完成的字符串返回给浏览器

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
放在js文件是和放html文件渲染时不一样的

1.3 常用语法

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
生成器

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

1.4 内置函数

在django模板语法中提供了内置函数让我们来。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

1.5 自定义模板功能

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

三种方式:

  • filter

    - 数据处理,参数:1~2个
    - 数据处理,if条件
    
  • simple_tag

    参数无限制 & 返回文本
    
  • inclusion_tag

    参数无限制 & HTML片段
    

需求来了:根据用户权限不同显示不同的菜单。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

1.6 继承和母版

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

1.7 模板的导入

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

2.django中间件(所有请求必须经历过的地方)

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

  • 定义方法
  • 注册

2.1 原始方式

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

2.2 MiddlewareMixin(建议)

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
注意:django1版本。

源码:

  • 面向对象

    class MyMd(object):
        def __init__(self....):
            pass
        
        def __call__(self,....):
            pass
            
    django内部默认执行call方法,传入参数。
    
  • 反射

    class MyMd(object):
        def __init__(self....):
            pass
        
        def __call__(self,....):
            if hasattr(self,'process_request'):
                response = self.process_request(request)
    		...
         
    django内部默认执行call方法,传入参数。
    
    class MiddlewareMixin:
        def __init__(self, get_response=None):
            self.get_response = get_response
            
        def __call__(self, request):
            response = None
            if hasattr(self, 'process_request'):
                response = self.process_request(request)
            response = response or self.get_response(request)
            if hasattr(self, 'process_response'):
                response = self.process_response(request, response)
            return response
        
        
    class MyMd(MiddlewareMixin):
        
        def process_request(self,request):
            ...
        
        def process_response(self,request, response):
            ...
        
    django内部默认执行call方法,传入参数。
    

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

疑问:prcess_request的执行时,是否已执行了路由匹配?

request.resolver_match

注意:process_view是在django中源码中写死了。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

2.3 其他

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

小结

  • 定义中间类
  • 类方法
    • process_request
    • process_view
    • process_reponse
    • process_exception,视图函数出现异常,自定义异常页面。
    • process_template_response,视图函数返回TemplateResponse对象 or 对象中含有.render方法。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

3.ORM操作

orm,关系对象映射,本质翻译的。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

3.1 表结构

实现:创建表、修改表、删除表。

在app中的models.py中按照规则编写类 ===> 表结构。

  • 编写类

    from django.db import models
    
    
    class UserInfo(models.Model):
        name = models.CharField(max_length=16)
        age = models.IntegerField()
        ###定义完了表 一般表名字为类名小写再加上app得名字
    
  • 注册app(在setting.py中注册app INSTALL_APPS)

    INSTALLED_APPS = [
        # 'django.contrib.admin',
        # 'django.contrib.auth',
        # 'django.contrib.contenttypes',
        # 'django.contrib.sessions',
        # 'django.contrib.messages',
        'django.contrib.staticfiles',
        'apps.app01.apps.App01Config',
        'apps.app02.apps.App02Config',
    ]
    
  • 命令,django根据models中类生成一个 对数据库操作的配置文件 => migrations

    python manage.py makemigrations##生成配置文件
    

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

  • 命令,读取已经注册么给app中的migrations目录将配置文件 -> 转换成:生成表,修改表 SQL -> 连接数据库去运行。

    python manage.py migrate### 把所有的app下面的migration都运行
    
    • 那个数据库?
    • 数据库账户和密码?
      Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

常见问题:请不要再手动去修改数据的表结构 + 时刻保证 ORM和数据表是对应

3.1.1 常见字段和参数
  • 字段

    CharField字符串  max_leght表示字符串长度
    
    SmallIntegerField
    IntegerField
    BigIntegerField
    
    DateField  年月日
    DateTimeField 年月日时分表
    
    BooleanField  -> 其实数据库不支持真假,根据SmallIntegerField创造出来出来。 0  1
    
    DecimalField  -> 精确的小数
    
  • 参数

    name = models.CharField(verbose_name="姓名", max_length=16)
    name = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈")
    
    # 经常查询,速度快(MySQL,https://www.bilibili.com/video/BV15R4y1b7y9)
    name = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈", null=True, blank=True, db_index=True)
    email = models.CharField(verbose_name="姓名", max_length=16, default="哈哈哈", null=True, blank=True, unique=True)
    
    # 在数据库存储时只能是:sh、bj (上海、北京一般用于页面显示中文)
    code = models.CharField(verbose_name="姓名", max_length=16, choices=(("sh", "上海"), ("bj", "北京")),default="sh")
    
    # 不用 max_length=16
    count = models.IntegerField(verbose_name="数量", default=1, null=True, blank=True, unique=True)
    code = models.IntegerField(verbose_name="性别",choices=((1, "男"), (2, "女")),default=1)
    ##数据库存储,1,2代表男女
    
    

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

register_date = models.DateField(verbose_name="注册时间", auto_now=True)###不用写 用户时间自动生成auto_now = True
amount = models.DecimalField(verbose_name="余额", max_digits=10, decimal_places=2)

示例:

from django.db import models


class UserInfo(models.Model):
    name = models.CharField(verbose_name="姓名", max_length=16, db_index=True)
    age = models.PositiveIntegerField(verbose_name="年龄")
    email = models.CharField(verbose_name="邮箱", max_length=128, unique=True)
    amount = models.DecimalField(verbose_name="余额", max_digits=10, decimal_places=2, default=0)
    register_date = models.DateField(verbose_name="注册时间", auto_now=True)


class Goods(models.Model):
    title = models.CharField(verbose_name="标题", max_length=32)
    # detail = models.CharField(verbose_name="详细信息", max_length=255)
    detail = models.TextField(verbose_name="详细信息")
    price = models.PositiveIntegerField(verbose_name="价格")
    count = models.PositiveBigIntegerField(verbose_name="库存", default=0)
    ###verbose 表示这个得中文含义 
3.1.2 表关系

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
上面得表等价于下面得,让程序生成第三张表(多对多关系)

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie
注意:让程序生成第三张表(多对多关系)ManyToManyField生成的表字段只能id/bid/gid


小结

设计自己项目的业务时,理清楚表与表之间的关系。

强调:设计项目表结构:表名和字段都不要拼音。

Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存,Django自学记录,django,中间件,Django中间件,ORM操作,Django模板,mysql连接池概念,session,cookie

3.2 数据

实现:增删改查。

任务

  • 知识点
  • 自己的项目设计表结构,自己设计。
    • 项目功能描述
    • 表结构
      • 设计图(提交)
      • ORM类(主要)

提交形式:zip包 -> markdown编写。文章来源地址https://www.toymoban.com/news/detail-759718.html


下节预告:
	orm数据操作、cookie和session、缓存、刷票平台(表结构设计)、用户管理、用户+权限菜单

到了这里,关于Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django中的中间件

    在Django中,中间件(Middleware)是一个轻量级的、底层的“插件”系统,用于全局地修改Django的输入或输出。每个中间件组件都负责执行一些特定的任务,比如检查用户是否登录、处理日志、GZIP压缩等。Django的中间件提供了一种方便的方式来处理一些全局的任务,而不需要在

    2024年02月19日
    浏览(50)
  • Django高级扩展之中间件

    中间件是Django请求/响应处理的钩子框架。它是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入或输出。每个中间件组件负责实现一些特定的功能。例如,Django包含一个中间件组件AuthenticationMiddleware,它使用会话将用户与请求关联起来。 目录 方法介绍 __init

    2024年02月10日
    浏览(43)
  • django校验token自定义中间件

    确保将 ‘path.to.TokenValidationMiddleware’ 替换为你中间件的实际路径。中间件会按照在列表中的顺序顺序执行,所以确保它在其他可能影响请求处理的中间件之前或之后执行,具体取决于你的需求。 这是一个简单的例子,实际上,你可能需要使用更复杂的 Token 校验逻辑,例如使

    2024年01月21日
    浏览(49)
  • 关于Django的中间件使用说明。

    中间件的大概解释:在浏览器在请求服务器的时候,首先要经过各种中间件,然后进行GET、POST等请求的访问,然后处理数据,最后经过各种中间件输出给浏览器。 我们可以利用中间件的特性,来解决用户登录过程中的繁琐问题。 在我们用django写后端服务的时候,需要很多

    2024年02月19日
    浏览(44)
  • Django笔记二十九之中间件介绍

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十九之中间件介绍 这一节介绍一下 Django 的中间件。 关于中间件,官方文档的解释为:中间件是一个嵌入 Django 系统的 request 和 response 的钩子框架,是一个能够全局改变 Django 输入/输出的系统。 我们可以这样理解,一个

    2023年04月23日
    浏览(57)
  • Python web实战之细说Django的中间件

                      🔑 :Python Web 开发、Django、中间件 今天分享Python Web开发中的一个重要成员:Django的中间件。介绍中间件的概念、作用及其在实战中的应用。 在Python Web开发中,中间件(Middleware)是指位于Web应用程序和Web服务器之间的一层软件组件。它能够拦截请

    2024年02月13日
    浏览(45)
  • 由浅入深:Django中间件原理及编程步骤

    什么是 Django 中的中间件? 中间件如何工作? 中间件有哪些类型? 如何在 Django 中编写自定义中间件? 1.1 什么是 Django 的中间件?** 通俗地说👨 ,中间件是充当程序或系统两个部分之间的桥梁,使它们之间的通信成为可能。在技术术语👨 💻中,中间件是Django的请求/响应

    2024年02月16日
    浏览(43)
  • Django 高级指南:深入理解和使用类视图和中间件

    Django 是一款强大的 Python Web 框架,它提供了一套完整的解决方案,让我们能够用 Python 语言快速开发和部署复杂的 Web 应用。在本文中,我们将会深入研究 Django 中的两个高级特性:类视图(Class-Based Views)和中间件(Middleware)。 在 Django 中,视图是一个 Python 函数,它接收一

    2024年02月13日
    浏览(44)
  • 【Kafka】Ubuntu 部署kafka中间件,实现Django生产和消费

    原文作者 :我辈李想 版权声明 :文章原创,转载时请务必加上原文超链接、作者信息和本声明。 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入

    2024年02月16日
    浏览(50)
  • 网安培训第二期——sql注入+中间件+工具

    gbk 中文 utf-8 mysql:数据库使用gbk编码方式 php:魔术转义符 使用 %df 跟省下的字节去组成一个汉字实现闭合。 例题: 单引号没反应 添加%df报错 添加%23报错消失,验证即可知,闭合成功。 insert 闭合方式 123’,‘456’)# 1. 闭合方式 (确定sql语句格式、列数) 2.字段匹配 3.字段

    2024年01月25日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包