母婴商城-视图函数的请求和响应

(1)商品类型模型 - Types

在这里插入图片描述

(2)商品信息模型 - CommodityInfos
在这里插入图片描述

(3)购物车模型 - CartInfos
在这里插入图片描述

(4)订单模型 - OrderInfos
在这里插入图片描述

2、定义视图函数 - indexView
查看商品类型表
在这里插入图片描述

查看index功能模块的路由文件(子路由)
在这里插入图片描述

根据以上路由定义知,路由名index对应的社图函数为indexView,故在views.py中定义视图函数indexView。
在这里插入图片描述

indexView中10个变量说明

title变量:用于设置网页标签内容,用于html中的title标签中
classContent变量:控制导航栏样式,首页样式设置为class=’active’。
commodityInfos变量:查询模型CommodityInfos销量最高的前8条数据,显示在首页“今日必抢”栏目内。
types变量:查询模型Types的全部数据,用于c1,f1,g1的数据类型筛选。
c1变量:在变量types的基础上,筛选types中“儿童服饰”的所有数据,并以列表格式表示。
clothes变量:以c1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“宝宝服饰”栏目。
f1变量: 在变量types的基础上,筛选types中“奶粉辅食”的所有数据,并以列表格式表示。
food变量:以f1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“奶粉辅食”栏目。
g1变量: 在变量types的基础上,筛选types中“儿童用品”的所有数据,并以列表格式表示。
goods变量:以f1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“宝宝用品”栏目。
最后return设置返回值,把视图函数中定义的变量传递给模板,然后由模板引擎对这些变量进行解析并渲染到网页上。
在这里插入图片描述

将types数据渲染到模板页面index.html上
在这里插入图片描述

遍历types,显示效果如下所示
在这里插入图片描述

2、请求对象 - WSGIRquest
当Django接收到HTTP请求后,会根据请求参数以及请求信息创建WSGIRequest对象,并作为视图函数的首个参数,该参数一般写成request,包含用户的请求信息。要获取用户的请求信息,使用WSGIRquest对象读取相关的类属性即可。

COOKIE:获取客户端(浏览器)的Cookie信息,以字典形式表示,键与值都是字符串。
FILES:django.http.request.QueryDict对象,包含所有的文件上传信息。
GET:获取GET请求的请求参数,它是django.http.request.QueryDict对象,类似字典。
POST:获取POST请求的请求参数,它是django.http.request.QueryDict对象,类似字典。
META:获取客户端(浏览器)的请求头信息,以字典形式存储。
method:获取当前请求的请求方式GET或POST。
path:获取当前请求的路由地址。
session:类似字典的对象,用来操作服务器的传话信息,可以临时存放用户信息。
user:当Django启用AuthenticationMiddleWare中间件时才可用,它的值是内置数据模型USER的对象,表示当前登陆的用户,如果用户没有登陆,那么user将设为django.contrib.auth.models.AnonymousUser的一个实例。由于WSGIRquest继承了HttpRequest,故类HttpRuest里定义的类方法在WSGIRquest中同样可用。
is_secure():是否采用HTTPS协议。
is_ajax():是否采用AJAX发送HTTP请求,判断原理是看请求头中是否有X-Requested-Wiith:XMLHttpRequest。
get_host:获取服务器的域名,包括端口。
get_full_path():返回路由地址,包括请求参数。
get_raw_uri():获取完整的网址信息。
3、获取请求相关信息
修改views.py的indexView视图函数代码
在这里插入图片描述

修改index.html页面,注释掉显示动态数据的代码
在这里插入图片描述

运行程序,查看效果
在这里插入图片描述

修改index.html,以POST方式提交请求
在这里插入图片描述

启动项目,查看结果
在这里插入图片描述

修改indexView视图函数,进行异常处理
在这里插入图片描述

再启动项目,查看结果
输入用户名和密码
在这里插入图片描述

单击【提交】按钮
在这里插入图片描述

(四)视图的响应方式
1、HttpResponse
(1)响应方式表
响应类型 说明
HttpResponse(‘响应内容’) 状态码200,请求已成功被服务器接收
HttpResponseRedirect(‘/’) 状态码302,重定向首页地址
HttpResponsePermanentRedirect(‘/’) 状态码301,永久重定向首页地址
HttpResponseBadRequest(‘400’) 状态码400,访问的页面不存在或请求错误
HttpResponseNotFound(‘404’) 状态码404,网页不存在或网页的URL失败
HttpResponseForbidden(‘403’) 状态码403,没有访问权限
HttpResponseNotAllowed(‘405’) 状态码405,不允许使用该请求方式
HttpResponseServerError(‘500’) 状态码500,服务器内容错误
JsonHttpResponse ({‘foo’:’bar’}) 默认状态码200,响应内容为JSON数据
StreamingHttpResponse() 默认状态码200,响应内容以流式输出
(2)案例演示 - HttpResponse
访问首页,显示“Hello Django World~”
在这里插入图片描述

启动项目,查看结果
在这里插入图片描述

如果使用以上方式返回数据,当数据量大时,对视图函数的代码量增加厉害,所以django增加了render、render_to_response和redirect函数。render_to_response已经废弃掉 (deprecated),与render差不多。
2、使用render()函数渲染模板页面
(1)render()函数参数
render(request, template_name, context=None, content_type=None, status=None, using=None)
1
前面2个参数是必选参数,后面4个参数是可选参数。

request参数:浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方法等。
template_name参数:设置模板文件名,用于生成网页内容。
context参数:对模板上下文(模板变量)赋值,以字典格式表示,默认情况下是一个空字典。
content_type参数:响应内容的数据格式,一般默认即可。
status参数:HTTP状态码,200默认。
using参数:设置模板引擎,用于解析模板文件,生成网页内容。
关键参数context,把视图函数中的变量传递给模板引擎,但当视图函数中变量过多时,传递不方便,故可使用Python内置语法locals()取代参数context。
在这里插入图片描述

(2)render读取模板文件的过程
使用loader.render_to_string方法读取模板文件内容。由于模板文件设置有模板上下文,故模板文件解析网页内容的过程需要由模板引擎using实现。解析模板文件的过程中,loader.rnder_to_string的参数context给模板语法的变量提供具体的数据内容,若模板上下文在该参数里不存在,则对应的网页内容为空。调用响应类HttpResponse,并将变量content(模板文件的解析结果)、变量content_type(响应内容的数据格式)和变量status(HTTP状态码)以参数形式传入HttpResponse,从而完成响应过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值