当前位置: 首页 > news >正文

北京网站建设第一/什么是淘宝seo

北京网站建设第一,什么是淘宝seo,做网站时搜索的代码是什么,自己做网站一、什么是Django ContentTypes? Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象接口。 当然我们不是说的是http中的content-type!完全没有任何关系!下面将一…

一、什么是Django ContentTypes?

Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象接口。 当然我们不是说的是http中的content-type!完全没有任何关系!
下面将一步一步解释Django ContentTypes在Django框架中做了什么,以及如何使用Django ContentTypes。 
当然,如果对于ContentTypes有了初步了解而只是不了解它的应用场景,可以直接查阅一下原文档:

https://docs.djangoproject.com/en/1.10/ref/contrib/contenttypes/

 

二、Django ContentTypes做了什么?

当使用django-admin初始化一个django项目的时候,可以看到在默认的INSTALL_APPS已经包含了django.contrib.contenttypes:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]

而且注意django.contrib.contenttypes是在django.contrib.auth之后,这是因为auth中的permission系统是根据contenttypes来实现的。

我们来查询查阅了一下django.contrib.contenttypes.models文件:

class ContentType(models.Model):app_label = models.CharField(max_length=100)model = models.CharField(_('python model class name'), max_length=100)objects = ContentTypeManager()class Meta:verbose_name = _('content type')verbose_name_plural = _('content types')db_table = 'django_content_type'unique_together = (('app_label', 'model'),)def __str__(self):return self.name

大家可以看到ContentType就是一个简单的django model,而且它在数据库中的表的名字为django_content_type。 

这个表的名字一般都不会陌生,在第一次对Django的model进行migrate之后,就可以发现在数据库中出现了一张默认生成的名为django_content_type的表。 
如果没有建立任何的model,默认django_content_type是这样的:

因此,django_content_type记录了当前的Django项目中所有model所属的app(即app_label属性)以及model的名字(即model属性)。 
当然,django_content_type并不只是记录属性这么简单,contenttypes是对model的一次封装,

因此可以通过contenttypes动态的访问model类型,而不需要每次import具体的model类型。

 

    • ContentType实例提供的接口 
      • ContentType.model_class() 
        • 获取当前ContentType类型所代表的模型类
      • ContentType.get_object_for_this_type() 
        • 使用当前ContentType类型所代表的模型类做一次get查询
    • ContentType管理器(manager)提供的接口 
      • ContentType.objects.get_for_id() 
        • 通过id寻找ContentType类型,这个跟传统的get方法的区别就是它跟get_for_model共享一个缓存,因此更为推荐。
      • ContentType.objects.get_for_model() 
        • 通过model或者model的实例来寻找ContentType类型

三、Django ContentTypes的使用场景

在我们这个项目中各种商品的优惠卷就运用到了这个知识点:

假使我们models下有这几张表:

class Electrics(models.Model):  #电器类name = models.CharField(max_length=32)price= models.IntegerField(default=100)def __str__(self):return self.nameclass Foods(models.Model):     #食物类name = models.CharField(max_length=32)price = models.IntegerField(default=100)def __str__(self):return self.nameclass Clothes(models.Model):   #衣服类name = models.CharField(max_length=32)price= models.IntegerField(default=100)def __str__(self):return self.nameclass Coupon(models.Model):    #优惠券name = models.CharField(max_length=32)def __str__(self):return self.name

我们先来考虑一个问题,如何把这些商品和优惠卷相关联?

一种商品一个优惠卷,那我们就在表中加入一种商品的优惠券,就是一个一对多的ForeignKey,那么多个商品就有各种优惠卷,

但是一种商品的特定优惠卷在表结构中,就那个字段有值,别的不相关的记录为null,而且每增加一个商品,又要手动的去添加外键,

这是繁琐的!

所以我们就使用contenttypes 应用中提供的特殊字段GenericForeignKey,我们可以解决上面的问题:

只需要以下三步:

  • 在model中定义ForeignKey字段,并关联到ContentType表。通常这个字段命名为“content_type”
  • 在model中定义PositiveIntegerField字段,用来存储关联表中的主键。通常这个字段命名为“object_id”
  • 在model中定义GenericForeignKey字段,传入上述两个字段的名字。

具体实例代码:

class Coupon(models.Model):name = models.CharField(max_length=32)content_type = models.ForeignKey(to=ContentType) # step 1object_id = models.PositiveIntegerField() # step 2content_object = GenericForeignKey('content_type', 'object_id') # step 3def __str__(self):return self.name

这样的话不管表的数据都可以查询出来,而且添加新的商品的商品,也不需要动优惠券的源码。

但我们在查询的过程中,用ORM实在太繁琐了,所以还有一个反向查询的方法:

就是在每个商品中关联 绑定一个关系:

coupons = GenericRelation(to='Coupon')  # 用于反向查询,不会生成表字段

这样我们就可以直接ORM的.coupons找相应的字段!

转载于:https://www.cnblogs.com/ManyQian/p/9463796.html

http://www.jmfq.cn/news/5078071.html

相关文章:

  • 设计素材网站那个好/企业网站的作用和意义
  • 公司网站优化推广/2022今天刚刚发生地震了
  • 长沙市网站制作多少钱/如何做个人网站
  • 摄影工作室网站设计/阳东网站seo
  • 我做推广找不到我的网站/百度seo优化排名如何
  • 做ppt的软件怎么下载网站/百度seo灰色词排名代发
  • 湖南外发加工网/seo技术蜘蛛屯
  • 新河网站建设/广州网站设计
  • 平面设计接单兼职/亚马逊seo什么意思
  • 辽宁建设工程信息网中标通知书/站长之家seo综合查询
  • 静态网站开发常用语言/游戏推广员拉人犯法吗
  • 一起做财经网站/外链工厂 外链
  • 襄阳网站建设需要多少钱/如何进行关键词优化工作
  • 佛山网站建设定制开发/百度权重域名
  • 用旧技术做网站能过毕设么知乎/百度代理查询系统
  • 沭阳网站建设/网络营销推广专员
  • 地产网站建设案例/如何设置淘宝友情链接
  • 电子商务实现技术/seo整站优化外包公司
  • 建设银网官方网站/seo关键词排名优化矩阵系统
  • wordpress 首页文章截断插件/天津百度seo
  • 有没有做妓男平台以及网站/线上平台推广方案
  • 给钱做任务的网站/沈阳百度快照优化公司
  • 龙口网站制作/整合营销方案
  • wordpress 快速填写qq/专业黑帽seo推广
  • 网站建设开发方式/江西网络推广seo
  • 域名会影响网站排名吗/品牌推广内容
  • 广州中医药资源门户网站/优化设计答案大全英语
  • 小型电商网站模板/去哪里推广软件效果好
  • 怎么做房产网站/免费推广网站2023mmm
  • 会建网站的人/网站查询备案信息