(十)Django学习——模型中的聚合查询,Q查询,F查询,分组查询;HttpRequest对象的学习;form标签中的GET和POST;类视图;文件上传;HttpResponse对象的学习;

2021/6/9 18:22:57

本文主要是介绍(十)Django学习——模型中的聚合查询,Q查询,F查询,分组查询;HttpRequest对象的学习;form标签中的GET和POST;类视图;文件上传;HttpResponse对象的学习;,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.补充的模型学习:

(1)聚合查询:aggregate()是QuerySet 的一个终止子句,它返回一个包含一些键值对的字典

在这里插入图片描述

(2)Q查询: 如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。Q对象可以使用&(and)、|(or)操作符组合起来;使用~(not)操作符在Q对象前表示取反在这里插入图片描述

(3)F查询: (查询的是一整列数据!)针对两个字段的值的比较

在这里插入图片描述

(4)分组查询: 为调用的QuerySet中每一个对象都生成一个独立的统计值

在这里插入图片描述

2.今日份主题:请求与响应

(1)HttpRequest对象

视图函数接受到的request到底是个什么对象呢?

在这里插入图片描述
**服务器接收到http协议的请求后,会根据报文创建HttpRequest对象(它是一个请求对象:用户信息(提交方式等);浏览器信息(请求头信息等)。)
视图函数的第一个参数是HttpRequest对象
在django.http模块中定义了HttpRequest对象的API
**

在这里插入图片描述

(2)form标签中的GET和POST

在HTML中,form表单的作用是收集标签中的内容,… 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。

**一个表单必须指定两样东西:

  1. form的method参数用于设置表单的提交方式,默认使用POST.
  2. action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL.**
①form表单使用post方式提交的例子:

(浏览器访问一个URL就是一次GET方式提交,返回给我们form.html模板;但是,因为我们的设置,所以点击模板中的提交按钮就是一次POST提交)

注意:
1.post的提交方式不会在url中显示参数
2.可以通过request.POST.get方式来获取提交的数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

②form表单使用get方式提交的例子:

(因为我们的设置,所以点击模板中的提交按钮就是一次GET提交,在对应的终端就可以打印form表单提交的a和b的值。)

注意:
1.get提交的参数会在url中显示.
2.可以通过request.GET.get的方法来获取
提交的参数.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

③一键多值的getlist方法:

request对象的属性GET、POST都是QueryDict类型的对象
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。

  • 方法get():
    根据键获取值,只能获取键的一个值
    如果一个键同时拥有多个值,获取最后一值
  • 方法getlist():
    根据键获取值将键的值以列表返回
    可以获取一个键的多个值

比如:后端如何通过获取多选框用户选中的选项——使用getlist方法!
在这里插入图片描述

在这里插入图片描述

④request中GET和POST对象的属性:

第一个:GET属性!

- QueryDict类型的对象
- 包含get请求方式的所有参数
- 与url请求地址中的参数对应,位于?后面
- 参数的格式是键值对,如key1=value1
- 多个参数之间,使用&连接,如key1=value1&key2=value2

第二个:POST属性!

- QueryDict类型的对象
- 包含post请求方式的所有参数
- 与form表单中的控件对应
- 表单中控件要有name属性,则name属性的值为键,value属性的值为值,构成键值对提交
- 对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况.

小拓展:
构造一个GET请求:(只要我们点击 ‘点击’ 按钮,会发现作用和浏览器使用GET方式提交一模一样,我们也可以在后端打印a和b的值,说明数据提交成功!)
在这里插入图片描述在这里插入图片描述

⑤GET和POST请求方式总结:
  1. GET:GET如其名,是从服务器获取数据,不会更改服务器的状态和数据,在URL中携带参数发送给服务器。
  2. POST则是将一定量的数据发送给服务器,一般会更改服务器的数据。
  3. POST方法的参数不能在URL当中看到,他是通过body参数传递给服务器的,所以相对GET方法直接能在URL当中看到传递的参数,显得更加安全一些.当然,也不能简单的判定POST方法比GET方法更安全,要使网站保持安全,需要做更多的安全处理.

(3)类视图

**View类视图以请求方式为类方法.
在对应的方式下面编写对应的逻辑函数.
**

举例讲解:如果我们浏览器访问这个URL,通过终端打印可以发现调用了类方法get;如果点击提交按钮会发现调用了类方法post。
在这里插入图片描述

在这里插入图片描述
**注意:
View类视图的引用。
在url.py中配置路由是通过: as_view()
**
在这里插入图片描述

(4)文件上传

①设置文件的存储路径:

1.在项目根目录下static中创建media文件夹
2.图片上传后,会被保存到“/static/media/文件”
3.打开settings.py文件,增加MEDIA_ROOT项

在这里插入图片描述

②文件上传form表单中:

在这里插入图片描述

③文件上传视图函数(使用下类视图):

Django在处理文件上传的时候,文件数据被保存在了request.FILES
FILES中的每个键为中的name

在这里插入图片描述

(5)HttpResponse对象:

①HttpResponse对象的属性和方法:

在这里插入图片描述

②HttpResponse的子类:

返回数据的响应函数有:
HttpResponse() 返回简单的字符串对象
render() 渲染模板
redirect() 重定向
JsonResponse() 返回json数据。结合前端AJax等技术可以实现后端向前端传数据,前端接收后实现诸如注册登录等的JS效果功能!

在这里插入图片描述

③客户端和服务器都是怎么记录登录的状态的呢?

(比如:你在浏览器中登录过了爱奇艺账号,哪怕你网页关闭了,只要时间不长,你再次登录的话会发现不用输入账号就已经是登录状态了!)

其实,在你的浏览器里有个cookie,他会记录用户的登录状态信息!

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

服务器中设置cookie及获取cookie:

在这里插入图片描述
注意:
(1)设置cookie值以及删除cookie值都是response对象的操作,而获取cookie是从requeset相应中获得的。
(2)虽然cookie可以保存状态但注意不要存储敏感信息。



这篇关于(十)Django学习——模型中的聚合查询,Q查询,F查询,分组查询;HttpRequest对象的学习;form标签中的GET和POST;类视图;文件上传;HttpResponse对象的学习;的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程