Django中的视图模块

来源:转载

一概述
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,)

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'

分享给朋友:
您可能感兴趣的文章:
随机阅读: