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

湛江手机网站建设公司系统门窗品牌10大品牌排行

湛江手机网站建设公司,系统门窗品牌10大品牌排行,聊城手机网站建设解决方案,青岛网站建设王道下拉??Django的模型层1.Model的开发流程2.定义Model模型3.Model模型的实例4.Model模型的实战操作笔记开发流程1.在models.py中定义模型类#xff0c;要求继承自models.Model2.生成迁移文件3.执行迁移5.定义属性1.字段类型2.字段选项3.关系模型实例1.类的属性2.创建对象3.实例的属性模…Django的模型层1.Model的开发流程2.定义Model模型3.Model模型的实例4.Model模型的实战操作笔记开发流程1.在models.py中定义模型类要求继承自models.Model2.生成迁移文件3.执行迁移5.定义属性1.字段类型2.字段选项3.关系模型实例1.类的属性2.创建对象3.实例的属性模型查询1.查询集2.限制查询集3.查询集的缓存4.字段查询1.比较运算符2.跨关联关系的查询处理join查询3.聚合函数 Django的模型层 模型是项目中的数据消息源它包含着储存数据的必要字段和行为 通常每个模型对应数据库中的一张表每个属性对应一个字段 每个模型都是Django.db.models.Model的一个Python子类 Django提供一套自动生成的用于数据库访问的API 模型与数据库的关系是ORM关系对象-关系-映射 为什么要使用模型 Model是MVC框架中的重要一部分负责在数据库中存取数据它实现了数据库与数据模型的解耦即不需要特定的数据库通过简单的配置就可以轻松的更换数据库 1.Model的开发流程 在应用的models.py中定义的模型类要求集成自models.Model 把应用加入到项目settings.py配置文件中的INSTALLED_APPS中 生成迁移文件 python manage.py makemigrations 执行迁移 python manage.py migrate 使用模型类进行CRU操作 2.定义Model模型 在模型类中定义属性会生成表中的字段 Django根据属性的类型确定以下信息 当前选择的数据库支持字段的类型 渲染管理表单数据时使用的默认html控件 在管理站点最低限度的验证 Django会为表增加自动生长的主键列每个模型只能有一个主键列 属性命名限制 不能是python的保留关键字 由于Django的查询方式部允许使用连续的下划线 3.Model模型的实例 模型实例对象就是通过objects属性获取即Django为模型提供的管理类 objects:是Manage类型的对象用于和数据库进行交互 实例的方法 str(self)重写object方法此方法在将对象转换成字符串时会被调用 save()将模型对象保存到数据表中 delete():将模型对象从数据表中删除 4.Model模型的实战操作笔记 开发流程 1.在models.py中定义模型类要求继承自models.Model class User(models.Model):id models.AutoField(primary_keyTrue, verbose_name主键)        # 主键可以不用写name models.CharField(max_length32, verbose_name用户名)age models.IntegerField(verbose_name年龄default20)phone models.CharField(max_length11, verbose_name手机号)add_time models.DateTimeField(defaultdatetime.now) ​class Meta:db_table myapp_user        # 表名默认为应用名_类名小写 ​def __str__(self):return self.name ​ 2.生成迁移文件 python manange.py makemigrations ​ ​ # 执行结果 C:\Users\Administrator\Desktop\Python开发\mywebpython manage.py makemigrations Migrations for myapp:myapp\migrations\0002_auto_20210921_1611.py- Create model User- Change Meta options on stu 3.执行迁移 python manange.py migrate ​ # 执行结果 ​ C:\Users\Administrator\Desktop\Python开发\mywebpython manage.py migrate Operations to perform:Apply all migrations: admin, auth, contenttypes, myapp, sessions Running migrations:Applying myapp.0002_auto_20210921_1611... OK 5.定义属性 定义属性时需要字段类型 字段类型被定义在django.db.models.fields为了方便使用被导入到django.db.models中 使用方式 导入from django.db import models 通过models.Field创建字段类型的对象赋值给属性 对于重要的数据要做逻辑删除不做物理删除实现方法是定义isDelete属性类型为BooleanField,默认为False 1.字段类型 AutoField:一个根据实际的ID最低顶增长的interField通常不指定 如果不指定一个主键将自动添加到模型中 BooleanFieldtrue/false字段.此字段的默认表单控制是Checkboxinput NullBooleanField支持null,truefalse三种值 CharFieldmax_length字段长度:字符串默认的表单数据是Textinput IntergerField:整数 TextField:大文本字段一般超过4000使用默认的表单控件是Textarea DecimalField(max_digitsNone,decimal_palcesNone):使用python的Decimal实例表示扽 十进制浮点数一般用于金钱 max_digits:位数总数 decimal_palces小数点后的数字位数 FloatField:用python的实例来表示的浮点数 DateField(auto_nowFalseauto_now_addFalse):使用python的datatime.data实例表示的日期 参数DateField.auto_now:表示保存日期时自动设置该字段为当前时间用于最后一次修改的时间戳它总是使用当前的日期默认为False 参数DateField.auto_nowDateField.auto_now_add:当对宪法第一次被创建时使用当前时间用于创建的时间戳它总是使用当前的日期默认为False 该字段默认的对应表单控件是一个Textinput:在管理员站点添加一个javaScript写的日志控件和一个Today的快捷按钮它包含了一个额外的invalid_data错误消息键 TimeField:使用python的datatime实例表示的时间参数同DateField DateTimeField使用的datetime.datetime实例表示的日期和时间参数同DateFiled FieField:一个上传文件的字段 ImageField继承了FileField的所有属性和方法但是对于上传对象进行校验确保是个有效的image 2.字段选项 通过字段选项可以实现对字段的约束 在字段对象时通过关键字参数指定 null:如果为True,Django将空值以NULL存储到数据库中默认是False black如果为True则该字段允许为空白默认是False 对比null是数据库范畴的概念black是表单验证范畴的 3.关系 关系的类型包括 Foreignkey:一对多将字段定义在多的端中 ManyToManyField多对多阿静字段定义在两端中 OneToOneFiled:一对一将字段定义在任意一端中 可以维护递归的关联关系使用self指定即为自关联 用一访问多对象.模型类小写_set bookinfo.heroinfo_set 用一访问一对象.模型类小写 heroinfo.bookinfo 访问id对象.属性_id heroinfo.bookinfo 模型实例 1.类的属性 objects:是Mnanager类型的对象用于和数据库进行交互 当定义模型类时没指定管理器。那么django会为模型类生成名为objects的管理器 支持明确指定模型类的管理器 class Book(models.Model):books models.Manager() 当为模型类指定管理器后django不再为默心累生成名为object的默认管理器 2.创建对象 当创建对象时django不会对数据库进行读写操作 调用save()方法才与数据库进行交互将对象保存到数据库中 说明init方法已经再模型类中使用再自定义模型中无法使用 3.实例的属性 DoesNotExit:在进行单个查询时模型的对象不存在时会引发异常结合try/except使用 from  myapp.models import User ​ ​ def index(request):# 添加操作ob User()                   # 实例化新对对象       ob.name 张三ob.age 20ob.mobile 13999999999ob.save()                     return HttpResponse(首页)   # 新对象就是添加已存在对象就是修改# 删除操作                     # 等价于 User.objects.get(id6).delete()mod User.objects            # 获取users的model对象user mod.get(id1)          # 获取id为6的数据信息user.delete()                 # 执行删除操作 # 修改操作ob Users.objects.get(id2)ob.name 张子怡ob.age 19ob.save() 模型查询 查询集表示从数据库中获取的对象的集合 查询集可以含有零个一个或者多个过滤器 过滤器基于所给的参数的限制查询的结果 从Sql的角度查询集和select语句等价过滤器像where和limit子句 1.查询集 在管理器上调用过滤器会返回查询集合 查询集经过过滤器删选后返回新的查询集因此可以写成链式过滤 创建查询及不会带来任何数据库的访问直到调用数据时才会访问数据库 何时对查询求值迭代序列化与if合用 返回查询集的方法称为过滤器 all() filter() exclude() order_by() values():一个对象构成一个字典然后构成一个列表返回 写法 filter(键1 值1键2值2) 等价于 filter(键1值1).filter(键2值2) ​ 返回单个值的方法 get():返回单个满足条件的对象 如果未找到会引发模型类.DoesNotExist异常 如果多条被返回会引发模型类.MultipleObjectsReturned异常 count():返回当前查询的总条数 first():返回第一个对象 last():返回最后一个对象 exits()判断查询集中的是否有数据如果有则返回True # 查询mod Users.objects # 获取User模型操作对象ulist mod.all() # 查询所有ulist Users.objects.filter(name马小宁)         # 查询马小宁的所有信息ulist mod.filter(age__gt20)                     # 查询年龄大于24的所有人ulist mod.filter(age__gte20)                   # 查询年龄大于等于20岁的所有人ulist mod.filter(age__lt20)                     # 查询年龄小于20的人ulist mod.order_by(age)                 # 按照年龄升序排列默认为升序降序即为-ageulist mod.all()[::2]                     # 只获取前两条 2.限制查询集 查询集返回列表可以使用下标的方式进行等同于sql中的limit和offset语句 注意这里不支持附属索引 使用下标后会返回一个新的查询集不会立即执行查询 如果获取一个对象直接使用[0],等同于[0:1].get(),但是如果没有数据[0]引发indexError异常[0:1].get()引发DoseNotExits异常 # 这会返回前五个对象 LIMIT 5 Entry.objects.all()[::5] # 这阿静返回第六个到第十个对象 offset 5 limit 5 Entry.object.all()[5:10] 3.查询集的缓存 每个查询集都包含一个缓存来最小化数据库的访问 在新建的查询集中缓存为空首次对查询集合求值时会发生数据库的查询django会将查询集求值将重用缓存的结果 情况一这将会构成两个查询集无法重用缓存每次查询都会与数据库进行一次交互增加了数据库的负载 print([e.title for e in Enter.objeccts.all()]) print([e.title for e in Enter.objeccts.all()]) 情况二两次循环使用同一个查询集第二次使用缓存中的数据 querylist Entry.objects.all() print([e.title for e in querylist)]) print([e.title for e in querylist]) 何时查询集不会被缓存当只对查询集的部分进行求值时会检查缓存但是如果这部分不在缓存中那么接下来查询返回的记录将不会被缓存这意味着使用索引来限制查询集将不会填充缓存如果这部分数据已经被缓存则直接使用缓存中的数据 4.字段查询 实现where子名作为查询方法filter(),get()的参数 语法属性名称__比较运算符 值 表示两个下划线左侧是属性名称右侧是比较类型 对于外键使用属性名_id表示外键的原始值 转义like语句中使用了%与匹配数据中的%与在过滤器中直接写例如 filter(title__contains %) where title like %%%,表示直接找标题中包含%的 1.比较运算符 exact():表示判等大小写敏感,如果没有写比较运算符,表示判等 filter(isDeleteFalse) contains:是否包含大小写敏感 filter(name_contains小宁)       # 名字中包含小宁   startwith,endwith:以value开头或者结尾大小写敏感 filter(phone_startwith3)       # 手机号码以3开头 isnull,isnotnull是否为null filter(name__isnullFalse)        # 名字不允许为空 在前面加i表示不区分大小写比如icontains,istartwith in:是否包含在范围内 filter(pk__in [1,2,3,4]) gt 、gte、 lt、 lte大于大于等于 小于 小于等于 year、month、day、week_day、hour、minute、second:对日期间类型的属性进行运算 filter(bpub_date_year 1980) filter(bpub_date_gt date(1980,12,31)) 2.跨关联关系的查询处理join查询 语法模型类名属性名比较 注可以没有__比较部分表示等于结果同inner join 可以返回使用即在关联的两个模型类中都可以使用 filter(heroinfo__hcontent__contains小宁) 3.聚合函数 使用aggregate函数返回聚合函数的值 函数Avg,Count,Max,Min,Sum from django.db.models import Max maxDate list.aggregate(Max(bpub_date))
http://www.pierceye.com/news/374191/

相关文章:

  • 免费承接网站建设公司网站备案资料
  • 深圳微信网站制作免费加盟一件代发货源网站
  • 青岛外贸网站建站公司东莞市专业的网页设计制作报价
  • 长沙网站设计工作室wordpress手机分享插件下载地址
  • 网站开发用什么图片格式最好网站数据库搬家
  • 宜宾建设网站企业所得税税负率
  • 广州网站二级等保上海企业网站模板
  • 做任务赚话费的网站网站直播间 是怎么做的
  • 合肥住房城乡建设部的网站传媒公司是干嘛的
  • 网站建设公司盈利深圳保障性住房在哪里申请
  • 网站建设(信科网络)谷歌推广怎么开户
  • 活动策划网站有哪些温州网页设计美工
  • 网站描述代码怎么写做正规小说网站
  • 无锡外贸网站制作公司php网站开发薪资 深圳
  • 做卡盟网站赚钱吗为企业制定网络营销方案
  • lol视频网站模板网站定制案例
  • 海兴县网站建设郑州嵌入式培训机构
  • 网站建设怎么记账韩国 电商网站
  • 公司介绍网站怎么做的网站建设的广告语
  • 茂名网站建设托管阿里云 wordpress主机名
  • 投票活动网站怎么做郑州营销型网站制作教程
  • 如何做一个导航网站凡科建设网站怎么保存
  • 哪个网站能叫我做直播回放广州十大猎头公司排名
  • 四川网站建设那家好百度爱采购竞价
  • 怎么做提卡密网站万游wordpress 验证
  • 威宁住房和城乡建设局网站网站介绍怎么写
  • 百度站长平台快速收录wordpress hook机制
  • 衡水提供网站设计公司哪家专业网站维护简单吗
  • 域名购买后 怎么创建网站网站内部优化是什么
  • 做微信公众号第三网站整站外包优化公司