一概述
1. 作用:视图接受Web请求,并返回Web响应
2. 本质:就是一个python函数,需要在views.py中定义,也可以是一个类,称为视图类
3. 响应:一般是一个网页内容,或者是一个错误信息页面,一个重定向,Json格式的数据
4. 流程
用户在浏览器输入网址以后 —->django获取网址信息,并且去掉ip地址和端口,然后将剩下的地址与定义的url匹配并记录下对应视图的名称—->视图管理器,找到对应的视图函数去执行,模型获取数据,将结果返回给浏览器,—>回到第一步
二URLCONF
1. 概述
(1)指定根级的URL配置文件 settings.py文件中的ROOT_URLCONF = ‘project’ 默认已经配置
(2)urlpatterns 是一个列表,列表中的元素是一个url()实例 url实例的组成 url(正则表达式, 视图名称,[名称])
注意:若想从url()中捕获一个值,需要给它加上一对小括号,与python中使用正则表达式一致
并且捕获的值需要与除了接收request对象的参数以外的参数一一对应
2. project/urls.py
url(r"^" include("myApp.urls", namespace="myApp"))
3. 应用目录下的urls
url(r"^rdns", views.world, name="world")
4. 反向解析
(1)概述:如果在试图,模板中使用硬编码的链接,在urlconf发生变化时,维护起来非常的困难
(2)在做链接时,通过指向urlconf的名称,动态生成链接地址,类似命名空间
(3)视图
django.core.urlresolvers.reverse("namespace:name")
(4)模板
<a href="{% url 'myApp:world' %}">去另一个世界看看</a>
三视图函数
1. 定义视图
(1)本质:一个函数
(2)参数:一个HttpRequest对象,通过正则表达式获取的关键字参数
(3)位置:在应用下的views.py下面定义
2. 错误视图
(1)需求:当用户输入网址发生错误或者其他错误,会返回一个较为友好的界面
(2)404视图:在templates目录下创建404.html
注意:需要配置settings.py文件
DEBUG = False
ALLOWED-HOSTS = [“*”]
(3)500视图操作与上面一样
四HttpRequest对象
1. 概述:服务器接收到http请求以后,会根据报文创建出HttpRequest对象,并将对象传递给了视图,视图的第一个对象就是用来接收HttpRequest对象的
2. 属性:
(1)path 一个字符串表示请求的页面的完整路径
(2)method 字符串, 表示请求使用的HTTP方法,常用的有GET和POST
(3)encoding 字符串,表示提交的数据使用的编码格式
(4)GET 类似字典的对象,包含get请求的所有参数
(5)POST 类似字典的对象,包含POST请求的所有参数
(6)FILES 类似字典的对象,包含所有上传的文件
(7)COOKIES 标准的python字典,包含所有的cookie,键值都为字符串
(8)seesion 类似字典的对象
def requestFunc(request):
request.path
request.method
request.encoding
request.GET
request.POST
request.FILES
request.COOKIES
request.session
return HttpResponse('request')
(9)方法: is_ajax() 如果请求是从XMLHttpRequest发起的,则返回True,即判断是否是ajax请求
3. QueryDict对象
(1)定义在django.http.QueryDict
(2)request对象属性中的GET,POST都是QueryDict对象
(3)与python字典类似,但是QueryDict对象可以拥有多个相同的键
4. 方法
(1)get() 功能,根据键获取值,一次只能获取一个值,无返回值为None
(2)getlist() 功能:将键的值以列表的形式返回,可以获取一个键的多个值
request.POST.get('a')
request.GET.get('a')
request.POST.getlist('a')
request.GET.getlist('a')
五HttpResponse对象
1. 引入HttpResponse对象 需要自己手动创建
from django.http import HttpResponse
1. 用法
(1)不调用模板,直接返回数据
return HttpResponse("xjt is a good man")
(2)调用模板
注意:简写返回模板
render(request, templateName, context)
说明:给定一个模板和一个字典数据,返回一个渲染后的HttpResponse对象
参数说明
request 请求对象 用于生成response对象
templates 模板名称
context 返回的字典数据 用于渲染模板
示例:return render(request, "index.html", {"data": data})
2. 属性
(1)content 表示返回的内容
(2)charset 表示response的编码字符集
(3)status_code 响应状态码
(4)content_type 指定输出的MIME类型
def response(request):
res = HttpResponse()
res.content = b'xjt is a good man'
res.charset = 'utf-8'
res.content_type = 'text/plain'
return res
3. 方法
1. init 使用页内容实例化HttpResponse对象
2. write(content) 以文件的方式返回
3. flush() 以文件的方式输出缓冲区
4. 设置cookie
set_cookie(key, value, max_age=None, expire=None)
def cookie(request):
res = HttpResponse()
res_set_cookie('name': 'xjt')
return res
1. 删除cookie
del_cookie(key)
4. 子类HttpResponseRedirect类
1. 功能:重定向,服务器跳转
def redirect(request):
return HttpResponseRedirect('/redirect2/')
5. 子类JsonResponse类
1. 返回Json数据,一般用于异步ajax请求
六状态保持
1. 概述
1. http协议是无状态的,每一次请求都是一次新的请求,不知道之前都做过什么()通信状态
2. 每一次客户端请求服务器都是一次通信,即一次会话
3. 实现状态保持的方式 在客户端存储与会话有关的数据
4. 存储的方式:cookie session 一般会话指的是session对象
5. 推荐session安全性较高,数据在服务器存储,在客户端cookie中存储session的键
6. 目的:在一段时间内,使用者跨页面访问时候,会一直具有相应的权限,无需重复验证
7. 安全性较高,不同的请求者之间不会共享数据,与请求者一一对应
2. 启用session
1. 在settings.py文件中
INSTALLED_APPS 中 插入 'django.contrib.sessions'
MIDDLEWATRE'django.contrib.sessions.middleware.SessionMiddleware'
3. 使用session
1. 启用会话后,每个HttpRequest对象具有一个session属性,这是一个类似字典的对象
2. get(key, default=None) 根据键获取会话的值,,如果键为None 则使用默认值
3. clear() 清除所有会话
4. flush() 删除当前的会话并删除会话使用的cookie
5. del request.session[‘username’]
4. 过期时间
1. 设置过期时间 set_expiry(value)
2. value还可以为0,让会话的cookie在用户关闭浏览器时过期
3. value还可以为None 永不过期
4. 设置session在浏览器关闭时,自动清除
# SESSION_EXPIRE_AT_BROWSER_CLOSE = True
如果没有指定,两个星期后失效
5. 存储session
注意:需要在settings.py中添加属性
1.基于数据库的存储(默认的会话存储方式)
SESSION_ENGINE = "django.contrib.sessions.backends.db"
2.基于缓存的存储
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_ENGINE = "django.contirb.sessions.backends.cache_db"
4.使用redis缓存session
在settings.py下配置
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION-REDIS_PORT = 6379
SESSION_REDISE_DB = 0
SESSION_REDIS_PASSWORD = 'xjt'
SESSION_REDIS_PREFIX = 'session'