自带的ContenType处理一张表对多表外键关系 2.1ContentType表会将models里面所有的表全部录入进来,也包括自带的所有的表 QQ截图20200301225108.png 2.2models...不生成字段,只用于反向查询 2.2.3 注意外键指向 ContentType 这张表 2.2.4 GenericForeignKey 接受两个参数,指向 ContentType 的表字段和单条 model...django.contrib.contenttypes.models import ContentType from django.db import models # Create your models...蛋炒饭 2 山东煎饼 3 茶叶蛋 """ name = models.CharField(max_length=32) # 不生成字段只用于反向查询...作为Django自带的表,会注册所有的视图表进入数据库表 # 表的 id 外键是 ContentType表 table= models.ForeignKey(to=ContentType
Django源码学习-24-Group ?...from django.contrib.auth.models import ContentType ?...在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的id和一个具体表中的id找到任何记录...如果自定义model,如果有外键关联到这个ContentType上,就能找到对应的model名称。 ?...2.ContentType.get_object_for_this_type(): 使用当前ContentType类型所代表的模型类做一次get查询。 ?
Django contenttypes 应用 简介 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。...示例代码: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields...3 不会添加字段,只是为了插入或者查询时使用 def __str__(self): return self.name 创建记录和查询 from django.shortcuts...() print(res) # 查询obj的所有优惠券:如果没有定义反向查询字段,通过如下方式: content = ContentType.objects.filter(app_label
在展示上需要考虑,是全部一次性显示出来,还是对数据分页呢?...那问题就来了,一次性全部显示出来,这样操作对于平台数据一旦有1W+,那渲染出来的数据所消耗的时间是很长,并且对数据库的查询能力也要有很高的要求。...通过 django 的装饰器,来自定义用户操作视图的权限。...from django.contrib.auth.models import Permission, ContentType 1.ContentType.model_class() : 获取当前 ContentType...类型所代表的模型类 2.ContentType.get_object_for_this_type() : 使用当前 ContentType 类型所代表的模型类做一次get查询 3.ContentType.objects.get_for_id
虽然本文是以Django为例,但其他框架和语言的优化原则也是类似的。通过使用这些优化方法,文中例程的查询响应时间从原来的77秒减少到了3.7秒。 ?...当通过House.objects.filter(country=country)来获得查询集时,Django将获取特定地区的所有房屋。...由于地区数据不在查询集中,所以django需要提出额外的请求来获取这些数据。对于查询集中的每一个房子都是如此,因此,总共是五万次。 当然,解决方案非常简单。...为了提取所有需要的序列化数据,你可以在查询集上使用select_related()。...这意味着大约有三分之一的函数调用都是由Django REST Framework产生的。 2.2 更新或替代第三方软件包 上述几个优化技巧是最常见的,无需深入地分析和思考就可以做到。
Django 用户及权限 #1 环境 Python3.7.3 Django==2.0.7 #2 用户 #2.1 User对象 这里推荐使用 AbstractUser, 而不是User 使用方法 from...models.UserProfile.objects.create_superuser(username="admin",password="cox123456",email="job@minhung.me") #2.2...import authenticate user = authenticate(username='cox', password='cox123456') if user: # 用户名密码匹配正确...else: # 用户名密码不匹配 自定义用户验证 当用户需要邮箱登录时,验证的是邮箱和密码,所以需要自定义用户验证 from django.contrib.auth.backends import...): name = models.CharField(max_length=255) # 权限名 content_type = models.ForeignKey( ContentType
由于认证授权在某种程序上是耦合的,所以Django把它们统称为“认证”。...只会简单比较请求的用户名密码和数据库中的用户名密码是否匹配。...import Permission from django.contrib.contenttypes.models import ContentType content_type = ContentType.objects.get_for_model...会把加密后的密码hash值存入session中,每次请求时,会校验session中的密码和数据库中的密码是否匹配。...如果修改了密码,数据库中的密码改变了,而session中的密码没有更新,那么密码就会匹配不上,导致session失效。
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。 ...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。 ...示例代码:models.py文件: from django.db import models from django.contrib.contenttypes.models import ContentType...import ContentType def test(request): if request.method == 'GET': # ContentType表对象有model_class...查询记录 查询name="电商1代金券"的代金券信息 ? ?
其它类型的操作可能需要分别处理每个对象;这种情况下我们需要对查询集进行遍历: for obj in queryset: do_something_with(obj) 编写操作的全部内容实际上就这么多了...ModelAdmin上的操作 ModelAdmin 上面的例子展示了定义为一个简单函数的make_published操作。...self.message_user(request, "%s successfully marked as published." % message_bit) 这会使动作与后台在成功执行动作后做的事情相匹配...import ContentType from django.http import HttpResponseRedirect def export_selected_objects(modeladmin...这需要处理任何类型的对象,所以需要处理ContentType。 这个视图的编写作为一个练习留给读者。 在整个站点应用操作 AdminSite.
① ContentType 将模型和app进行关联 from django.contrib.auth.models import ContentType ContentType 是Django内置的一个应用...Group 对象可以通过 user_set 反向查询用户组中的用户。可以通过创建删除 Group 对象来添加或删除用户组。 ?...③ Permission 权限 from django.contrib.auth.models import Permission 权限都是django.contrib.auth.Permission的实例...④ 自定义 Command 命令 from django.core.management.base import BaseCommand Django 对于命令的添加有一套规范,可以为每个app 指定命令...import BaseCommand from django.contrib.auth.models import Group, Permission, ContentType class Command
2.2 使用域名 应该尽量将API部署在专用域名之下,意思就是给API专门做一个服务器。...更好的做法是,除了第一级,其他级别都用查询字符串表达。 GET /authors/12?categories=2 下面是另一个例子,查询已发布的文章。你可能会设计成下面的 URL。...#引入APIView,APIView是继承的django的View,也就是APIView在View的基础上添加了一些其他的功能 from rest_framework.views import APIView...2.2 解析器组件 知识准备,还记得一个叫做contentType的http请求头的东西吗?回想一下。 ? ...django自动通过contentType来解析数据的那些方法就叫做django的解析器,能解的是urlencode和文件的那个mutipart/form-data类型的数据,然后将数据放到了request.POST
第二范式(2NF):属性完全依赖路主键(唯一性) 第二范式是在第一范式的基础上建立起来的,也就是第二范式要求数据库表中的每个实例或行必须可以被唯一的区分,也就是一张表至少有一个主键来区分每一条记录。...orm相关的数据库查询优化 惰性查询 惰性查询指当我们只查数据库而不是用这些数据时,Django不会执行查询数据库的代码,目的是减少不必要的数据库操作,降低数据库的压力。...(当一个查询是另一个查询的条件时,称之为子查询。)...自称是MTV框架,其实本质还是MCV MCV(models views controllar) models views controllar:模型层、视图层、控制层 controllar指url(路由匹配...(这一特点给用户的感受是在不知不觉中完成请求和响应过程) AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
一、ContentType 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的...也就是说,今后,我们如果自己定义model如果有外键关联到這个ContentType上,我们就能找到对应的model名称。...二、Django-ContentType-signals django的signal结合contenttypes可以实现好友最新动态,新鲜事,消息通知等功能。...为此,我们可以利用Django自带的ContentType类,来做这件事情。 ...字段查询关联字段操作 from django.shortcuts import render,HttpResponse from django.contrib.contenttypes.models import
结合Django自带权限机制和object permission,博客系统中作者的权限控制迎刃而解:系统全局上不允许作者编辑文章,而对于属于作者的具体文章,赋予编辑权限即可。...import Permission from django.contrib.contenttypes.models import ContentType content_type = ContentType.objects.get_for_model...Permission.objects.create(codename='can_publish', name='Can Publish Posts', content_type=content_type) 2.2...到django shell里查询一下权限: >>> python manage.py shell >>> from django.contrib.auth.models import User >>>...第三步: 定义权限验证方法, 逻辑是这样,请求访问学员列表, 先获取url地址,根据url地址得到urlname, 再获取请求方法和参数,然后使用urlname, 请求方法,参数列表到数据库中查询,能查询到之后说明这个权限存在
contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。 那么这个表有什么作用呢?...只需要以下三步: 在model中定义ForeignKey字段,并关联到ContentType表。...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。 ...示例代码: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields...=32) price = models.IntegerField(default=100) coupons = GenericRelation(to='Coupon') # 用于反向查询
Django实战-多对多查询 Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用...② 为了能追踪到操作的具体动作,必须从这张表中得到相应操作的model,这就得用ContentType。...from django.db import modelsfrom django.contrib.auth.models import Userfrom django.contrib.contenttypes...models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) content_type = models.ForeignKey(ContentType...往期回顾 Django源码学习-4-Signals 信号量 Django源码学习-25-ContentType Django实战-信息资讯-付费资讯基础模型 Django实战-生鲜电商-删除购物车数据|
在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的id和一个具体表中的id找到任何记录...为此,可以利用Django自带的ContentType类,来做这件事情。...from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation...from django.contrib.contenttypes.models import ContentType class Survery(models.Model): """..., null=True) content_object = GenericForeignKey('content_type', 'object_id') # 这个字段不会再数据库中存在,只是在查询时有用
的obj.get(): django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。...比如我数据库里有一条记录,记录的name的值是"django"的话,我用student = Student.objects.get(name='django'), 返回的是一个记录对象,你可以通过student...而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。...student = Student.objects.get(name='python') book = Book.objects.get(student) 它也会报错,因为book表有2条记录和student表相匹配...二.再说下django filter: django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
,year,相同用法的还有匹配月month,匹配日day,匹配周week_day,匹配时hour,匹配分minute,匹配秒second User.objects.filter(create_time_...: # 查询用户的角色名 _t = User.objects.get(username='运维咖啡吧') _t.role.name 反向查询: # 查询角色下包含的所有用户 _t = Role.objects.get...t.groupUsers.all() get_object_or_404 正常如果我们要去数据库里搜索某一条数据时,通常使用下边的方法: _t = User.objects.get(id=734) 但当id=724的数据不存在时...方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http import Http404 try: _t = User.objects.get...(id=724) except User.DoesNotExist: raise Http404 get_or_create 顾名思义,查找一个对象如果不存在则创建,如下: object, created
领取专属 10元无门槛券
手把手带您无忧上云