视图
- 概念:
- 作用:视图接受web请求,并响应web请求
- 本质:视图就是一个python函数
- 响应:
- 响应过程:
- 用户在浏览器中输入网址(www.sunck.wang/sunck/index.html) 网址
- django获取网址信息 ----》 去除IP与端口 (sunck/index.html) 虚拟路径与文件名
- url管理器 --》逐个匹配urlconf --》 记录视图函数名 #匹配成功执行对应的视图函数 视图函数名
- 交给视图管理器view --》 找到对应的视图去执行,返回结果给浏览器 --》 返回第一步 网页(相应的数据)
- url配置:
- 配置流程:
制定根级url配置文件 —> settings.py文件中的 ROOT_URLCONF(默认已经修改好了)
- urlpatterns:
一个url实例列表
url对象;
正则表达式
视图名称 - url匹配正则的注意事项;
- 如果想要从url中获取一个值,需要对正则加小括号
- 匹配正则前方不需要加斜杠
- 正则前需要加r表示字符串不转义
- 引入其他url配置
一般在应用中创建url.py文件,定义本应用的url配置,在工程中urls.py文件中使用include()方法 - URL反向解析(反向代理)
- 概念:如果视图、模板中使用了硬编码链接,在URL配置发生改变时,动态生成链接地址
- 解决:在使用连链接时,通过url配置的名称,动态生成url地址
- 作用:使用url模板
- 视图函数
- 定义视图:
- 本质:一个函数
- 视图参数:一个HttpRequest实例
通过正则表达式获取参数 - 位置:一般在views.py文件夹下定义
错误视图: - 404视图 --> 再找不到网页时(url匹配不成功)返回的
在templates目录下定义404.html --> request_path导致错误的网址
- 配置setting.py文件
DEBUG:如果为Ture永远不执行404
ALLOWED_HOSTS = [’*’] - 500视图 --> 在试图代码中出现错误(服务器代码)
- 400视图 --> 错误出现在客户的操作
- HttpRequest对象
- 概述:服务器接收http请求后,会根据报文(数据流)创建一个HttpRequest对象,视图的
第一个参数就是HttpRequest对象,是django创建的,之后调用视图时传递给视图 - 属性;
- path:请求的完整路径(不包括域名和端口)
- method:表示请求的方式,常用的GET、POST
- encoding:表示浏览器提交的数据的编码方式(utf-8)
- GET:类似于字典的对象,包含了get请求的所有参数
- POST:类似于字典的对象,包含了post请求的所有参数
- FILES:类似于字典的对象,包含了所有上传的文件
- session:类似字典对象,表示当前会话
- 方法:
- is_ajax():如果是通过XMLHttpRequest发起的,返回True()
- QueryDict对象
- 方法:
- get():根据键获取值,只能获取一个
- getlist():将键的值以列表的形式返回,可以获取多个值
- GET属性:获取浏览器传递过来的给服务器的数据
- 例如:http://127.0.0.1:8080/sunck/get1?a=1&b=2&c=3
def get1(request):
a = request.GET.get('a')
b = request.GET.get('b')
c = request.GET.get('c')
return HttpResponse(a+''+b+''+c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
c = request.GET.getlist('c')
return HttpResponse(a1+''+a2+''+c)
- POST属性:
使用表单模拟实现POST请求 - HttpResponse对象
- 概念:给浏览器返回数据
- HttpRequest对象是由django创建,HttpResponse是由程序员创建
- 返回数据用法:
- 不调用模板,直接返回数据
def index(request):
return HttpResponse(‘页面’) - 调用模板,调用render
- 原型:render(request,templateName[,context])
- 作用:结合页面数据和模板,返回完整的HTML页面
- 参数:
- request:请求体对象
- templateName:模板路径
- context:传递给需要渲染在模板上的数据
- 实例:
def insdex(render):
return render()
- 属性:
content:表示返回的内容的类型
charset:编码格式
status_code:响应状态码
200,304,404 - 方法:
init: 使用页面内容实例化HttpResponse对象
wreite(content):以文件的形式写入
flush(): 以文件的形式输出缓冲区
set_cookie(key,value=’’,max_age=None,exprise=None)
delete_cookie(key):删除cookie
注意:如果删除一个不存在的key,就当什么都没发生 - 子类HttpResponseRedirect:重定向,服务器端的跳转,跳转到另一个页面
例如:www.baidu.com,跟www.baidu.com/index.html是一个页面,只这就是重定向
- 简写:用和rander同级的radirect
- 引入:from django.shortcutes import redirect2
- 子类JsonResponse:
可以返回json数据,一般用于异步请求 - init(self,data)
data 字典对象
注意:Context-type类型为application/json
- 状态保持
- http协议是无状态的,每次请求都是一次新的请求,不记得以前请求
例如:京东登录页面,未登录后进入后,显示未登录,登录后再次访问时,状态还是未登录 - 客户端与服务端的一次通信就是一次会话
- 实现状态保持,在客户端或者服务端存储有关会话的数据
- 存储方式:
cookie: 所有的数据存储在客户端,不要存敏感信息
缺点:存数量小,不安全
session:所有的数据存数在服务端,在客户端用cookie存储session_id - 状态保持的目的:在一段时间内跟踪请求者的状态,可以实现夸页面访问当前的请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者是一一对应的 - 启用session
setting.py文件中 INSTALLED_APPS , MIDDLEWARE默认启动状态 - 使用session
- 启用session后每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
get(key,default=None) :根据键获取session值
clear():清空所有的会话
flush():删除当前会话并删除会话的cookie