首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django学习笔记之Queryset详解

e in a: print (e.blog.name) len(l) 遍历时,每次都要查询数据库,l长度每次增1,Django提供了方法可以在查询时返回关联表实体,如果是onetoone...中的实现 在SQL中,很多关键词在删、改、查时都是可以用的,如order by、 like、in、join、union、and、or、not等等,我们以查询为例,说一下django如何映射SQL的这些关键字的...ValuesQuerySet, ValuesListQuerySet Author.objects.filter(**kwargs)对应的SQL只返回主表(即Author表)的所有字段值,即使在查询时关联了其它表...看下面两段代码,这两段代码在1.1中提到过。在代码1中,在遍历a前,先执行a对应的SQL,拿到数据后,然后再遍历a,而遍历过程中,每次都还要查询数据库获取关联表。...,它们的每个元素包含若干主表和关联表的字段,不包含任何实体和关联实例,这种情况要用values()和values_list();第四种:返回model instance;第五种:单个值,如aggregate

2.7K30

Django 笔记-1-从请求到响应

: 加载所有中间件,以及执行框架相关的操作,设置当前线程脚本前缀,发送请求开始信号; 处理请求,调用 get_response() 方法处理当前请求,该方法的的主要逻辑是通过urlconf 找到对应的...中间件-Middleware 概述: Django 中的 Middleware 类似底层中一个轻量级的插件系统,它能够介入 Django 的请求和响应过程,在全局修改 Django 的输入和输出内容。...如果请求通过洋葱的所有层(每一个调用 get_response)以将请求传递到下一层,一直到内核的视图,那么响应将在返回的过程中通过每个层(以相反的顺序)。...外中间件运行时在视图运行前或在 process_view() 中访问 request.POST 会使得之后的所有视图无法修改 request,所以应该尽量避免。...视图或中间件返回; 调用时间:process_request 在所有响应返回客户端前被调用; 产生响应:这个方法必须返回一个 HttpRequest 对象,它可以修改给定的 response 对象,也可以创建一个全新的

88021
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django—模型

    对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。...在MVC中Model中定义的类,通过ORM与关系型数据库中的表对应,对象的属性体现对象间的关系,这种关系也被映射到数据表中。 Django框架中ORM示意图如下: ?...:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。...在新建的查询集中,缓存为空,首次对查询集求值时,会发生数据库查询,django会将查询的结果存在查询集的缓存中,并返回请求的结果,接下来对查询集求值将重用缓存中的结果。..._meta.get_field("field") # 括号内为字段,类型是字符串 all_data = filter_field_obj.rel.to.objects.all() # 根据字段查询该表的所有数据的查询集

    6.1K21

    【Django】Django ORM 学习笔记

    前言 ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL...当首次对 QuerySet 的所有实例进行求值时,会将查询结果保存到 QuerySet 的缓冲中。当再访问该 QuerySet 时,会直接从缓冲中取数据。...关联大体上可以分为两种: 只有一个关联实例: 外键关联中包含外键的表、OneToOneField,例如下图中的 orm_blog 只与一个 orm_author 的实例关联 有多个关联实例:外键关联中不含外键的表...`title` = ‘blog2') F 查询 F 查询主要用来处理表中字段之间的比较,例如查询 blog 表中 title=conent 的记录。同时 F 查询还支持计算(加减乘除)。...aggregate: 针对所有记录调用聚合函数,返回一个 dict 对象,下面是使用示例: from django.db.models import Min from django.db.models

    2.2K20

    【Django】 开发:数据库操作和后台管理

    WHERE id > 4; 修改数据 1.修改单个实体的某些字段值的步骤: 查 通过 get () 得到要修改的实体对象 改 通过 对象。...(age__gt=65) auths.delete() 聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部进行统计查询,查bookstore_book数据表中的全部书的平均价格,查询所有书的总个数等...return HttpResponse('请查看服务器端控制台获取结果') F对象 一个F对象代表数据库中某条记录的字段的信息 作用: 通常是对数据库中的字段值在不获取的情况下进行操作 用于类属性...用法 F 对象在数据包 django.db.models 中,使用时需要先导入 from django.db.models import F 语法: from django.db.models import...中的游标cursor对数据库进行 增删改查 操作 在 Django 中跨过模型类直接操作数据库 使用步骤: 导入 cursor 所在的包 Django 中的游标 cursor 定义在 django.db.connection

    4.1K40

    Django中间件看完这篇彻底明白

    如果返回None,Django将继续处理下一个中间件的request函数;如果返回HttpResponse对象,Django将不再执行其他除process_response以外的所有函数,包括后面的process_request...如果返回None,Django将继续处理下一个中间件的request函数;如果返回HttpResponse对象,Django将不再执行其他除process_response以外的所有函数,包括后面的process_request...如果返回None,Django将使用框架内置异常处理,并继续交给下一个exception函数;如果返回HttpResponse对象,Django将不再执行其他除process_response以外的所有函数...就是在process_request中进行处理的,根据我们在settings中配置的SESSION_COOKIE_NAME变量,从cookies中获取对应的值,从表中查询出session值,创建session...: path = request.get_full_path() 在process_response函数中,会判断是否需要把404的请求重新定向到我们需要的页面 django.middleware.csrf.CsrfViewMiddleware

    4K20

    Django

    ============= """ request.GET[POST] 大字典 在函数中获取数据库中数据 from app_01 import modules ### 查询所有的数据...调用时使用类名add_list ,会根据请求方式转到对应方法 def get(self,request):pass def post(self,request):pass urls 中...) 使用装饰器 # get,post (self,request) 装饰器中第一个参数是request,不匹配 # 解决方案:form django.utils.decorators import...,回调函数中,按照此类型解析,不写就是字符串类型 traditional:True,// 为true,阻止深度序列化,不懂什么意思,反正就可以传list了...(在settings.py里面设置中 # 从上到下的顺序) # 何时执行: # 在urls.py中找到对应关系之后 # 在执行真正的视图函数之前 # 返回值: # 返回None,继续执行后续的中间件的process_view

    3.5K20

    使用 Django + Vue.js 开发个人博客网站(完整版附源码)—— Python-课程设计-期末项目

    在物理模型中,由于存在一对多的关系,所以文章表和评论表中加上了两个 外键约束 。...,而是可以写出实体类,再执行 Django 的文件迁移命令,就可以自动生成数据表了。...: class Article(models.Model): """ 文章实体类 """ # 外键约束: 和用户表关联在一起: 设置级联删除: 即删除用户的同时会删除该用户的所有文章...中 :param request: 请求对象 :return: 返回值,这里是一个响应对象 """ # 首先从前端获取到验证码的 uuid uuid = request.GET.get('uuid')...存储进去,这样之后校验的时候就可以直接拿过来比较,如果匹配则可以注册,不匹配则报错。

    6K40

    后端框架学习-Django

    起始行:方法、路由、协议 headers:请求头 K:V 请求体(body):可能为空 请求方法: GET:返回实体主体 HEAD:调试获取报头 POST:向指定资源提交数据进行处理 PUT:更新...tests.py views.py:视图函数 分布式路由 Django中,主路由配置文件可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。...:QuerySet,存放模型实例 exclude(条件) 语法同上 等价于 WHERE NOT 作用:返回不包含此条件的全部数据集 电商取非可以用该语句 get(条件) 容易报错...) 作用:通常对数据库字段值在不获取的情况下进行操作,用于类属性之间的比较 F(‘列名’) 对数据库字段值在不获取的情况下进行操作: 例:需求:将Book表中所有的market_price全部自增...中保存在数据库中,因此需要保证已经执行过了migrate Django session的问题: 1.django session的表是单表设计,且该表数据量不会自动清理,哪怕是已经过期。

    9.6K40

    Python面试题100例【26~30题】

    以下是Django操作数据库的基本步骤:定义模型:在Django中,每个数据库表由一个Python类来表示,这个类继承自django.db.models.Model。每个类的属性就表示数据库表的字段。...get_response是一个回调函数,用来获取视图的响应。call方法是真正处理请求和响应的地方。...例如,如果你需要访问一个外键关联的对象的某个属性,最好使用select_related或prefetch_related方法,这样可以在一次查询中获取所有必要的信息,避免“N+1查询”问题。...一个中间件基本上就是一个Python类,它定义了以下一个或多个方法:init(self, get_response):在中间件实例化时调用一次,其中get_response是一个用于获取视图响应的回调函数...中间件的执行顺序在Django设置中的MIDDLEWARE列表中定义,这个列表的顺序非常重要。

    24160

    Django漏洞系列

    在Django 3.0.3版本以下的GIS查询功能模块(GPS定位相关模块)中存在的SQL注入漏洞,其产生漏洞的原因是GIS的聚合查询功能中,用户在oracle的数据库且可控tolerance变量,并且要命的是未对该变量做任何的用户输入检查...该权限的用户只可以创建实体,不可以创建数据库 CONNETC:该权限下的用户只可以登录ORACLE,不可以创建数据库也不可以创建实体 dual表:此表是Oracle数据库中的一个自带表,有说法这是一个虚拟表...与MySQL不同的是,在MySQL中查询语句可以直接是:select 1,2,但是在Oracle中就必须跟一个表名,如下:select * from dual rownum=1:限制查询返回的总行数为一条...,列如:rownum<3 表示输出两条数据 # 查询出所有的表 select * from all_tables # 查询出当前用户的表 select * from user_tables...,不然报错 Django QuerySet.order_by() SQL注入漏洞 漏洞编号:CVE-2021-35042 Django3.2.4中的QuerySet模块中关于的order_by函数中存在的

    3.3K40

    Django REST 框架详解 04 | 序列化与反序列化及二者整合

    1.视图 2.路由 3.接口测试 一、序列化 1.步骤 model s.py,定义表与字段,及表关系 serializes.py 中序列化与反序列化 views.py 中写 get,post 等操作..., author, is_delete, create_time 3.模型构建 modes.py from django.db import models # 基表 # 提供公用的字段,而不创建表 from...(default=0) create_time = models.DateTimeField(auto_now_add=True) # 作为基表的 Model 不能在数据库中创建表...,子序列化方式 # 注意:调用时有加载顺序,PublishModelSerializer >> PublishModelSerializer # 这里通过 book 中 publish...三、序列化与反序列的整合 从数据的安全性和健壮性来考虑,所有的自定义字段不能与 model 的原字段相同 因为序列化是将外键字段作为 Dict,而反序列化会将外键字段作为 Object 1.视图 views.py

    1.2K10

    Django入门

    这篇文章是看了Django官方文档并进行练习之后总结的笔记,主要总结入门需要了解的几个知识点: 使用Django创建项目。 路径匹配,一个请求路径是如何映射到对应的回调函数。...从CREATE TABLE todo_todo中可以看出,Django将应用名todo和model名称的小写结合起来作为表的名称,如果要自定义对应的表的名称,需要使用Meta选项中的db_table属性...添加数据 当创建了数据模型之后,Django会自动给到一个数据库抽象的API,用于进行数据的增删改查。一个模型类表示一个数据库表,一个模型类实例代表一个数据库表中的记录。...图-5 5.删除数据 使用delete()删除QuerySet的所有行,返回的是删除的行的数量,以及包含删除的每个对象类型的数量信息的一个字典。...包含一个as_view() 方法,返回匹配到url的时候要调用的回调函数。

    1.5K00

    Python后端技术栈(七)--web框架

    start_response是生成 WSGI 响应的回调函数,接收两个参数,status 和 headers。 3.函数返回响应体的迭代器。...它用来实现业务对象与数据表中的字段映射。常见的有 SQLAlchemy、Django ORM 以及最新的 Peewee。优势在于代码更加面向对象,代码量更加的少,灵活性高,提升开发效率。...1.7.3.3 RESTful 解释 1.Resources(资源):使用 URI 指向的一个实体。比如在 web 应用中,一个用户、一首音乐或者一个订单,我们都可以把它表示为一个实体,称之为资源。...1.通过 HTTP GET/POST/PUT/DELETE 获取/新建/更新/删除 资源 把 HTTP 动词语义和数据库的增删改查结合到一起 2.一般使用 JSON 格式返回数据 3.一般 web 框架都有相应的插件支持...Django中数据库的相关操作 DRF框架中的英文单词 DRF框架 Django相关知识点回顾 python技术面试题-腾讯

    1.7K40

    七日Python之路--第十二天(Django Web 开发指南)

    添加 class Meta: abstract = True #这样不会创建数据库表,只是用来为其他实体类提供属性而存在的 ---- 唉,刚吃完晚饭。外面竟下起了瓢泼大雨。...(7)使用模型 Django项目中 manage.py 脚本包含了操作数据库的功能。syncdb只能保证所有模型类都有对应的数据库表,但不会修改已经存在的数据库表。...: raise Http404 或者使用 get_object_or_404 (15)利用 *args / **kwargs #在视图函数中 def myview...(*args, **kwargs): #这样我们就可以使用,args[0]或kwargs['object_id'] 而不需要再记住 URLconf中的名称了 ##当然在 Django1.6中,完全可以不用在...在模板中输出context变量时,会隐式的调用unicode方法。如果试图打印没有__unicode__方法的对象,在模板中是不可见的。

    1.8K20

    Django篇(二)

    不指定时,Django会自动生成字段为id的自增长字段。...更多模型字段,请参考Django官方文档。写的明明白白。 查询 我们在Django中通过操作模型类去做增删改查,sql语句那么多,我们同样可以进行增删改查。 其中最复杂的也就是查询了。...查询函数 我们在Django中通过:模型类.objects属性调用以下函数来进行查询 get: 返回表中满足条件的一条数据,有且只能有一条,查询出多条会报异常。 查询不到数据也会报异常。...首先我们需要导入Q模块: from django.db.models import Q Q实例: 在实例之前,在Filter中是可以进行and操作的,但是不能进行or操作。...关联查询(一对多) 关联实例班级表(classinfo),学生表(stuinfo) 查询班级id为1的所有学生: # 查询到id为1的班级 c = classinfo.objects.get(id=

    1.4K20

    初识Django之前端后端与数据库的配置

    在Django中需要自己手动创建静态文件存放的文件夹。 在创建好文件夹后需要在settings文件内进行如下配置: ?...选择好我们需要的数据库后会进入下面的界面 ? 将pycharm中修改后的表写入数据库可通过下图进行 ?...Django默认自带一个小型数据库sqlite(仅做测试使用,对日期格式不兼容),这里我们使用Django连接主流数据库MySQL。...Django连接MySQL的模块,如果我们不配置的话Django会报错让装MySQLdb,但是这里我们使用pymysql,具体配置:在Django项目名下或者应用名下的__init__.py中书写 import...这里需要说明的是数据库字段的删除(包括注释表中已有的字段)一定要慎重,特别是一定不要注释字段,否则数据迁移命令后数据库中对应的字段就被删除了。

    1.6K21
    领券