Django笔记-5-视图
概述
作用
视图接受web请求, 并相应web请求;
本质
视图就是一个Python中的函数
相应
- 网页
- 重定向
- 错误视图
- 404
- 500
- ...
- Json数据
- 过程: 用户输入网址→Django解析网址→(获得访问字段)→匹配urls→(获得视图函数)→视图通过模板渲染数据→返回给浏览器
url配置
配置流程
-
制定根URL配置文件
在project文件夹下, seetings.py文件夹下
ROOT_URLCONF=‘project.urls’
-
urlpatterns
-
一个url实例的列表
-
url对象
- 正则表达式
- 视图名称
- 名称
-
-
url匹配正则表达式的注意事项
- 如果想要从url中获取一个值, 需要对正则加小括号
- 匹配正则前方不需要增加反斜杠
- 正则前需要加r表示字符串不转义
-
引入其他url配置
在应用中创建urls.py文件, 定义此应用的url方法, 在主项目文件urls.py中使用include()方法引入;
-
URL的反向解析
-
概述
如果在视图/模板中使用了硬编码链接, 在url配置发生改变时,动态生成链接的地址全部需要更改
-
解决
在使用链接时, 通过url配置的名称,动态生成url地址
-
作用
使用url模板
示例:
# project/urls.py url(r'^', include('app.urls', namespace="app"))
# app/urls.py url(r'^good/(\d+)/$)', views.good, name='good'
# index.html <a href="/good/1/">硬编码链接</a> <a href="{% url 'app:good ' 1 %}">反向解析链接</a>
-
视图函数
-
定义视图
本质: 一个函数
-
视图参数:
- request:一个HttpRequest的实例
- 通过正则表达式获取的参数
-
位置
一般在views.py文件下定义
-
-
错误视图
-
404视图:找不到网页时返回错误
在templates目录下定义404.html
配置settings.py
DEBUG=False
-
ALLOWED_HOST=[‘*’] # 允许任何人访问 ```
-
500视图:在视图代码中出现错误
-
400视图:用户的操作出现错误
HttpRequest 对象
-
概述
服务器接收http请求后, 会根据报文创建HttpResponse对象;
视图的第一个参数就是HttpResponse对象
Django创建的, 之后调用视图时传递的视图
-
属性
- path: 请求的完整路径, 不包括域名和端口;
- method: 表示请求的方式, 常用的有GET/POST;
- encoding: 表示浏览器提交的数据的编码方式;(一般为UTF-8);
- GET: 类似与字典的对象,包含了GET请求的所有参数;
- POST: 类似与字典的对象,包含了POST请求的所有参数;
- FILES: 类似与字典的对象,包含了所有上传的额文件;
- COOKIES: 字典对象, 包含所有cookie;
- session: 类似字典的对象,表示当前会话;
-
方法
is_ajax(): 如果是通过XMLHttpRequest发起的, 返回True
-
QueryDict对象
-
request对象中的GET/POST都属于QueryDict对象;
-
方法
-
get()
作用: 根据键获取值, 仅一个值
-
getlist()
将键的值以列表的形式返回, 可以获取多个值
-
-
-
GET属性
目的: 获取浏览器传递给服务器的数据
-
POST属性
使用表单提交POST请求
关闭CSRF
HttpResponse对象
-
概述
作用: 给浏览器返回数据;
HttpRequest对象是由django创建的, HttpResponse对象是由程序员创建
-
用法
-
不调用模板,直接返回数据
-
调用模板
-
使用render方法
-
原型
render(request, templateName, {context})
-
作用
结合数据和模板, 返回完成的HTML页面
-
参数
request
templateName
context
-
示例
def students(request): student_list = Student.objects.all() return render(request, 'app/students.html', {"students": student_list})
-
-
-
-
属性
-
content: 返回内容
-
charset: 返回数据的编码格式
-
status_code: 响应状态
200/304/404...
-
content-type: 指定输出的MIME类型
-
-
方法
-
init
使用页面内容实例化HttpResponse对象
-
write(content)
以文件的形式写入
-
flush()
以文件的形式输出缓冲区
-
set_cookie(key, value=‘’, max_Age=None, exprise=None)
设置cookies
-
delete_cookie(key)
删除cookie
注意:
如果删除一个不存在的cookie , 那么什么都不会发生.
-
-
子类HttpResponseRedirect
-
功能
重定向: 服务器端的跳转
简写: redirect()
to 推荐使用反向解析
-
-
子类JsonResponse
-
返回json数据, 一般用于异步请求(ajax)
-
__init__ :(self, data)
-
data: 字典对象
-
注意: content-type类型为application/json
-
Session状态保持
-
概述
-
http协议是无状态的, 每次请求都是一次新的请求, 不记住之前请求.
-
客户端与服务器端的一次通信就是一次会话
-
为实现状态的保持, 在客户端或服务端存储会话的数据
-
-
存储方式有cookie和session
- cookie: 所有数据都存储在客户端, 不要存敏感数据(不安全,数据量小)
- session: 所有数据存储在服务端, 在客户端用cookie存储session_id
-
目的
在一段时间内跟踪请求者的状态, 可以实现跨页面访问当前的请求者数据
-
注意
不同的请求者不共享此数据, 与请求者一一对应.
-
启用session
settings.py中
-
INSTALLED_APPS中默认启用
-
MIDDLEWARE中默认启用
-
-
使用session
-
启用session后, 每个HttpRequest对象都有一个session属性,就是一个类似字典的对象;
-
get(key, default=None): 根据键获取session值
-
clear(): 清空所有的会话
-
flush(): 删除当前的会话和cookie
-
设置过期时间:set_expiry(value)
如果不设置,两个星期后过期;
value是整数:例如10,表示10秒钟;
-
存储session的位置
- 数据库: 默认存储在 数据库中;
- 缓存: 只存储在本地内存中, 如果丢失不能找回,比数据库快;
- 数据库和缓存: 优先从本地缓存中读取, 读取不到再去数据库中获取
-
使用redis存储session
- pip install django-redis-session
-
看老师犯了个错误的心得: 每个代码都很重要.