自关联、中间件

M2M自关联特性:

class UserInfo(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    gender_choices = (
        (1,‘男‘),
        (2,‘女‘),
    )
    gender = models.IntegerField(choices=gender_choices)
    m = models.ManyToManyField(‘UserInfo‘)

会额外生成一张表,userinfo_m   里面有三列id 、from_userinfo_id、to_userinfo_id
M2M自关联特性:
    obj = models.UserInfo.objects.filter(id=1).first()
    # from_userinfo_id
    obj.m          => select xx from xx where from_userinfo_id = 1

    # to_userinfo_id
    obj.userinfo_set => select xx from xx where to_userinfo_id = 1
定义:
    # 前面列:男生ID
    # 后面列:女生ID
查男生
xz = models.UserInfo.objects.filter(id=1).first()
u = xz.m.all()
for row in u:
    print(row.nickname)
查女神
xz = models.UserInfo.objects.filter(id=4).first()
v = xz.userinfo_set.all()
for row in v:
    print(row.nickname)                

FK自关联:

class Comment(models.Model):
    """
    评论表
    """
    news_id = models.IntegerField()            # 新闻ID
    content = models.CharField(max_length=32)  # 评论内容
    user = models.CharField(max_length=32)     # 评论者
    reply = models.ForeignKey(‘Comment‘,null=True,blank=True,related_name=‘xxxx‘)
    #blank   Admin中是否允许用户输入为空

"""
   新闻ID                         reply_id
1   1        别比比    root         null
2   1        就比比    root         null
3   1        瞎比比    shaowei      null
4   2        写的正好  root         null
5   1        拉倒吧    由清滨         2
6   1        拉倒吧1    xxxxx         2
7   1        拉倒吧2    xxxxx         5
"""
"""
新闻1
    别比比
    就比比
        - 拉倒吧
            - 拉倒吧2
        - 拉倒吧1
    瞎比比
新闻2:
    写的正好
"""

中间件

在配置setting中MIDDLEWARE就是中间件
创建一个文件m1.py
from django.utils.deprecation import MiddlewareMixin

from django.shortcuts import HttpResponse
class Middle1(MiddlewareMixin):
    def process_request(self, request):
        print(‘m1.process_request‘)        结果直接传递给下一个中间件。
        # return HttpResponse(‘不要再往下传了‘)
        如果有返回值,就不再传递给下一个中间件了。

    def process_response(self, request, response):
        print(‘m1.process_response‘)
        return response   必须要返回,不然下一个中间件不能拿到结果。

在配置setting中MIDDLEWARE添加中间件m1
“m1. Middle1”
时间: 2024-10-24 20:59:35

自关联、中间件的相关文章

python运维开发(二十)----models操作、中间件、缓存、信号、分页

内容目录 select Form标签数据库操作 models操作F/Q models多对多表操作 Django中间件 缓存 信号 分页 select Form标签补充 在上一节中我们可以知道Form标签有两个作用,一个做用户提交数据验证,一个是生成HTML标签 在生成HTML标签中可以生成select标签,select的选项数据我们可以在数据库中查询读取到. class UserType(models.Model): caption = models.CharField(max_length=1

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair 这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编码错误等相关问题,希望文章对你有所帮助! 一. 分布式时代 1.服务化 在系统发展的过程中,架构

中间件_百科介绍

中间件 编辑 中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程序或独立系统的软件.相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息.执行中间件的一个关键途径是信息传递.通过中间件,应用程序可以工作于多平台或 OS 环境. 目录 1基本概念 2相关概念 3基本特点 ? 特长? 局限 4发展沿革 ? CICS? 服务器? 发展现状 5分类 ? 远程过

数据库相关中间件介绍

数据库相关中间件介绍 详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt412 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据

MyCat:取代Cobar数据库中间件

什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群 ? 一个融合内存缓存技术.Nosql技术.HDFS大数据的新型SQL Server ? 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 ? 一个新颖的数据库中间件产品. 目标 低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速

django数据库操作和中间件

数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import models class userinfo(models.Model): name = models.CharField(max_length=30) email = models.EmailField() memo = models.TextField() 可用的字段: 1.models.Aut

MOM Message-Oriented Middleware 基于消息的中间件(背景调研)

基于消息的中间件MOM 中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品.但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次 上,对中间件的分类也会有所不同.由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务称之 为平台.基于目的和实现机制的不同,我们将平台分为以下主要几类: 远程过程调用(Remote Procedure Call) 面向消息的中间件(Message-Oriented Mid

嵌入式linux与51/430/STM32的嵌入式开发的区别与关联

嵌入式linux与51/430/STM32的嵌入式开发的区别与关联 总结: 微控制器系列:8051, MSP 430 , STM32 F0-3( ARM Cortext M0 - M3系列)等 主要特点没有内存管理单元,不能运行linux 这类有着虚拟内存的操作系统,只能运行裸机程序或是ucOS一类的实时操作系统.主要工作就是外设驱动开发(比如写个编码器的驱动,液晶的驱动,usb的驱动)和基于驱动的应用程序开发,如控制类和简单的图像处理功能. 微处理器系列: ARM Cortex A系列的处理器

分库分表中间件Sharding-JDBC

数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据和高并发对数据库的冲击,是各大互联网公司不可避免的问题. 虽然很多公司都致力于开发自己的分库分表中间件,但截止目前,仍无完美的开源解决方案覆盖此领域. 分库分表适用场景 分库分表用于应对当前互联网常见的两个场景——大数据量和高并发.通常分为垂直拆分和水平拆分两种. 垂直拆分是根据业务将一个库(表)拆分为多个库