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

网页设计个人网站作业网站用的字体

网页设计个人网站作业,网站用的字体,wordpress编辑器保留word格式,免费的百度网站怎么做目录 一、多表操作 【1】基于对象的跨表查 【2】基于双下滑线的连表查 【3】related_name 二、聚合查询与分组查询 【1】聚合查询 【2】分组查询 三、F与Q查询 【1】F查询 【2】Q查询 四、其他字段和字段参数 【1】其他字段 【2】ORM字段参数 【3】ForeignKey 属…

目录

一、多表操作

【1】基于对象的跨表查

【2】基于双下滑线的连表查

二、聚合查询与分组查询

【1】聚合查询

【2】分组查询

三、F与Q查询

【1】F查询

【2】Q查询

四、其他字段和字段参数

【1】其他字段

【2】ORM字段参数

【3】ForeignKey 属性

【4】ManyToManyField

【5】中间表创建方式

【6】在表中都可以定义要给内部类

五、Django与Ajax

【1】什么是Ajax

【2】作用

【3】同步交互,异步交互

【4】使用

【5】真正的ajax原生

【6】计算 +  小案例

【7】上传文件

【8】json格式

六、Cookie和Session


一、多表操作

【1】基于对象的跨表查

  • 又叫子查询  -----> 执行了两句sql,没有连表操作

【2】基于双下滑线的连表查

  • 一次查询,连表操作

放在ForeignKey,OneToOneField,ManyToManyField的

  • related_name='books':双下滑线连表查询,反向查询按表名小写 ---> 用来替换表名小写
publish__books__name
  • related_query_name='books':基于对象跨表查,反向查询 ---> 用来替换表名小写
pubilsh.book_set.all()
pubilsh.books.all()

二、聚合查询与分组查询

【1】聚合查询

aggregate()QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。用来做聚合查询。

聚合函数:Avg,Count,Min,Max,Sum

使用

方式一:

# 计算所有图书的平均价格
from django.db.models import Avg
Book.objects.all().aggregate(Avg('price'))  # {'price__avg': 34.35}   	
---> select name,price,avg('price') as price__avg from book; 

 方式二:

# 计算所有图书的平均价格
from django.db.models import Avg
Book.objects.aggregate(average_price=Avg('price')) 
# {'average_price': 34.35}       
---> select name,price,avg('price') as average_price from book; 

如果你希望生成不止一个聚合,你可以向aggregate()子句中添加另一个参数。

from django.db.models import Avg,Count,Max,Min
# 统计平均价格和最大价格
ret = Book.objects.all().aggregate(avg_price=Avg('price'),max_price=Max('price'))

【2】分组查询

分组后通常会用聚合  ----> annotate用来分组和聚合的

分组的目的:把有相同特征的分成一组,分成一组后一般用来:统计总条数,统计平均数,求最大值等等。

annotate:

  • filter在annotate前:表示过滤,where条件
  • values在annotate前:表示分组的字段,如果不写表示按整个表分组
  • filter在annotate后:表示 having条件
  • values在annotate后:表示取字段 ---> 只能取分组字段和聚合函数字段

示例

# 统计每一本书作者个数--->按书分
Book.objects.all().values('id').annotate(auyher_num=Count("authors")).values('name','author_num')# 统计每一个出版社的最便宜的书--->按出版社
Publish.objects.all().valuse('id').annotate(min_price=Min("book__price")).vlaues('name','min_price')
Publish.objects.annotate(MinPrice=Min("book__price"))# 查询每一个书籍的名称,以及对应的作者个数--->按书分   
Book.objects.all().values('id').annotate(count_publish=Count("authors")).value('name','count_publish')# 查询每一个以红开头书籍的名称,以及对应的作者个数--->按书分     
Book.objects.all().filter(name__startswith='红')values('id').annotate(count_publish=Count("authors")).value('name','count_publish')        # 查询每一个以红开头书籍的名称,以及对应的作者个数大于3的记录--->按书分
Book.objects.all().filter(name__startswith='红')values('id').annotate(count_publish=Count("authors")).filter(count_publish__gt=3).value('name','count_publish')

三、F与Q查询

【1】F查询

F查询:拿到某个字段在表中具体的值,F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

查询评论数大于收藏数的书籍

from django.db.models import F
Book.objects.filter(评论数__gt=F('收藏数'))

Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。

# 查询评论数大于收藏数2倍的书籍
Book.objects.filter(commnetNum__lt=F('keepNum')*2)

让所有图书价格 +1

Book.objects.all().update(price=F('price')+1) 

【2】Q查询

Q查询:为了组装成与/或/非条件

与条件:and条件,在filter中直接写 ---> 就是and条件

Book.objects.filter(authors__name="lqz",price=100)

或条件:|

Book.objects.filter(Q(authors__name="lqz")|Q(authors__name="justin"))

非条件:Q 对象可以使用~操作符取反

Book.objects.filter(~Q(name='红楼梦'))

复杂逻辑:(名字为红楼梦并且价格大于100) 或者 id 大于 2

Book.objects.filter((Q(name='红楼梦') & Q(price__gt=100))|Q(nid__gt=2))

四、其他字段和字段参数

【1】其他字段

。。。。。。

【2】ORM字段参数

null# 用于表示某个字段可以为空。unique# 如果设置为unique=True 则该字段在此表中必须是唯一的 。db_index# 如果db_index=True 则代表着为此字段设置索引。default# 为该字段设置默认值。DateField和DateTimeField#### auto_now_add
配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。default=datatime.datatime.now#### auto_now
配置上auto_now=True,每次更新数据记录的时候会更新该字段。null                数据库中字段是否可以为空
db_column           数据库中字段的列名
default             数据库中字段的默认值
primary_key         数据库中字段是否为主键
db_index            数据库中字段是否可以建立索引
unique              数据库中字段是否可以建立唯一索引verbose_name        Admin中显示的字段名称
blank               Admin中是否允许用户输入为空
editable            Admin中是否可以编辑
help_text           Admin中该字段的提示信息
choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
---> get_字段名_display()
error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
validators          自定义错误验证(列表类型),从而定制想要的验证规则

【3】ForeignKey 属性

  • to
    • 设置要关联的表
  • to_field
    • 设置要关联的表的字段
  • related_name
    • 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’。
  • on_delete
  • 当删除关联表中的数据时,当前表与其关联的行的行为。
    • models.CASCADE
      • 删除关联数据,与之关联也删除
    • models.DO_NOTHING
      • 删除关联数据,引发错误IntegrityError
    • models.PROTECT
      • 删除关联数据,引发错误ProtectedError
    • models.SET_NULL
      • 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
    • models.SET_DEFAULT
      • 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
    • models.SET
      • 删除关联数据,
        • a. 与之关联的值设置为指定值,设置:models.SET(值)
        • b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
  • db_constraint
    • 是否在数据库中创建外键约束,默认为True
    • db_constraint=False  在数据库中不建立外键约束
    • 虽然不建立数据库外键约束 ---> 但是orm查询,继续用

【4】ManyToManyField

用于表示多对多的关联关系。在数据库中通过第三张表来建立关联关系

  • to
    • 设置要关联的表
  • through
    • 在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。
    • 但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名。
  • through_fields
    • 设置关联的字段。
  • db_table
    • 默认创建第三张表时,数据库中表的名称。

【5】中间表创建方式

自动生成:用不到through 和  through_fields

authors = models.ManyToManyField(to='Author',db_table='中间表表名')
book表
id   name           price
1    西游记           22
2    红楼梦           33bookToauthors
id  book_id   author_id  
1    1            1
2    1            2author表
id   name    gender    age
1    lqz      男        18
2    罗贯中    女        22

手动创建中间表,使用through指定

三张表都要手动创建 ---> 3个类 --->3个表模型

什么情况会使用手动创建?----> 中间表如果有多的字段,都是手动创建

authors = models.ManyToManyField(to='Author',through='booktoauthor', through_fields=('当前表--》到中间表的外键关系','剩下的写在第二个位置')) 
book表
id   name         price
1    西游记         22
2    红楼梦         33booktoauthor
id  book_id   author_id   日期
1    1            1       
2    1            2author表
id   name    gender    age
1    lqz      男        18
2    罗贯中    女        22
  • 自动创建中间表,有快捷操作
    • add
    • remove
    • set
    • clear
  • 手动创建中间表 ---> 中间表我们自己能拿到  ---> 这些快捷操作,就没了
  • 纯手动创建中间表,不使用ManyToManyField关联
    • 不会在book或author表中加 ManyToManyField 字段了 

【6】在表中都可以定义要给内部类

class Author(models.Model):name = models.CharField(max_length=32)class Meta:  #元信息db_tableindex_togetherunique_togetherordering # 默认按id排序

五、Django与Ajax

【1】什么是Ajax

Ajax就是异步Javascript和XML

【2】作用

Javascript语言与服务器(Django)进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)

【3】同步交互,异步交互

  • 同步交互:js发送出请求 ---> 直到请求回来 ---> 页面不能操作,不能点击
  • 异步交互:js发出请求 ---> 等待请求回来的过程中 ---> 页面可以随意继续操作

【4】使用

使用了jq帮咱们封装的方法  ajax ,名字跟ajax相同 $.ajax

【5】真正的ajax原生

  • 需要使用js操作,jq的ajax方法是对原生js的封装,方便我们使用
  • 前后端混合项目中,我们通常使用jq的ajax实现 js和后端异步交互
    • jq操作dom
    • jq发ajax请求
  • 前后端分离项目中,我们会使用另一个第三方库,实现 js和后端异步交互(axios)
    • 只想发送ajax请求 ---> 只用来发ajax请求的库

【6】计算 +  小案例

编码格式是 :urlencoded

【7】上传文件

编码格式:form-data

【8】json格式

$("#ajax_test").click(function () {var dic={'name':'lqz','age':18}$.ajax({url:'',type:'post',contentType:'application/json',  // 一定要指定格式 contentType: 'application/json;charset=utf-8',data:JSON.stringify(dic),    // 把对象转换成json字符串格式success:function (data) {console.log(data)}})})

六、Cookie和Session

1  存在浏览器上的键值对,就是Cookie

cookie哪里来的?---> 服务端返回的 ---> 放在响应头的cookie中 ---> 浏览器会自动取出来

----> 放到cookie中

再次向cookie所在的域发送请求,它会自动携带当时存的cookie

2  存在于服务端的键值对,称之为Session

http://www.yayakq.cn/news/987275/

相关文章:

  • 软件公司网站 手机版做网站公司logo
  • 15个html5手机网站模板wordpress 炫酷博客
  • 网站出现404浏览器为什么打不开网站
  • 搭建一个个人网站张家港市网站制作
  • 网站建设公司知名淘宝客做网站教程
  • 沈阳网站网站建设报告论文
  • 养生网站源码西部数码网站管理助手 卸载
  • 网站及微信建设是否涉及知识产权WordPress怎么去掉底部
  • 沈阳网站设计制作流行的网站设计风格
  • dedecms网站tag标签静态化中国比较有名的产品设计公司
  • 盘锦公司做网站网站收录下降
  • 网站关键词优化系统vue做网站前端
  • 怎样做网站代理百度seo培训公司
  • 建材团购网站建设方案绿化信息网站建设
  • 百度云 做视频网站企业h5网站建设
  • 福州seo网站推广网站建设找哪家公司
  • 旅游网站功能厦门网站建设多少钱
  • 哪个网站可以做免费宣传wordpress 中的函数
  • 网站访问量很大怎么办互联网备案服务平台
  • 网站建设与管理总结网站设计风格及色彩搭配技巧 -
  • 深圳建网站兴田德润实惠福永网站优化
  • 做网站注意哪些方面软文推广做得比较好的推广平台
  • 个人网站怎么做微信支付xml做网站源码
  • php开源企业网站系统wordpress二次元主体
  • 常州网站建设外包短故事网站模板
  • 网站建设的完整流程包括哪些单位邮箱一般用什么邮箱
  • 重庆网站建设重庆wordpress缺少style
  • 建站工具有哪些怎么做网站设计
  • 快速搭建网站后天台推广营销平台排名
  • 外贸网站建设的意义房产网贷平台