第一部分:HttpResponse对象
1.URL路径参数
位置参数
参数的位置不能错
关键字参数
参数的位置可以变,跟关键字保持一致即可
2.Django中的QueryDict对象
get()
根据键获取值
如果一个键同时拥有多个值将获取最后一个值
getlist()
根据键获取值,值以列表返回,可以获取指定键的所有值
注意点
1.QueryDict 是一个类似于字典的数据类型,但不是字典:< QueryDict: {'a': ['100'], 'b': ['200']} >
2.QueryDict 即可以存储一键一值,也可以存储一键多值
3.请求体中发送的数据
form表单
1.注释setting中的csrf代码
2.获取的数据data = request.POST
<QueryDict: {'b': ['888'], 'a': ['666']}>
通过POST传递JSON数据
1.json数据格式
必须是双引号,除数字以外
2.用户提交的post数据
byte类型
body_bytes = request.body
b'{\n "name":"wangpengbin"\n}'
将二进制类型转为字符串
body_str = body_bytes.decode()========>{ "name":"wangpengbin"}
将字符串转为字典
dict = json.loads(body_str)========>{ "name":"wangpengbin"}
4.请求头(header)
1.获取方式
request.META
2.打印结果
'CONTENT_TYPE': 'application/json'
3.获取自定义的参数
request.META['HTTP_NAME']
5.其他属性
method
表示请求使用的HTTP方法
GET
POST
user
请求的用户对象
1.没有登录的用户django默认是匿名用户
AnonymousUser
2.登录反之
path
表示请求的页面的完整路径,不包含域名和参数部分
/insert/100/200/
encoding
表示提交的数据的编码方式
使用浏览器的默认设置,一般为utf-8: None
FILES
一个类似于字典的对象,包含所有的上传文件
<MultiValueDict: {}>
第二部分:HttpResponse对象
1. 三个参数
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
1.content
表示返回的内容
2.status_code
返回的HTTP响应状态码
200
404
3.content_type
指定返回数据的的MIME类型
MIME类型
语法形式
大类/小类
例如
text/javascript
application/json
image/png
2.HttpResponse子类
Django提供了一系列HttpResponse的子类
3.JsonResponse
作用
将数据转换为json字符串
设置响应头Content-Type为application/json
设置
1.return JsonResponse({'name':'itcast'})
{"name": "itcast"}
可以通过原理设置
2.对字典列表进行转换
未设置safe是报错信息
设置safe即可
原理
1.设置content_type
2.使用json.dumps将字典转为json
4.redirect重定向
重定向
return redirect('http://www.itcast.cn')
第三部分:状态保持
Cookie
客户端存储信息
特点
Cookie以键值对的格式进行信息的存储
Cookie基于域名安全,不同域名的Cookie是不能互相访问的
第一次请求的时候需要设置响应头cookie信息,之后请求的时候也携带cookie
骚操作
设置Cookie
方法
通过HttpResponse对象中的set_cookie方法来设置cookie
格式
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
max_age单位为秒
默认为None
例如
response.set_cookie('name','wangpengbin')
读取Cookie
方法
通过HttpResponse对象的COOKIES属性来读取本次请求携带的cookie值
格式
data = request.COOKIES
删除Cookie
方法
通过HttpResponse对象中的delete_cookie方法来删除
格式
response.delete_cookie('name')
Session
服务器端存储信息
特点:
启用Session
Django项目默认启用Session,可以在settings.py文件中查看
存储方式
可以保存在数据库、本地缓存等
2.1 数据库
存储的表 :
表的结构:
2.2 本地缓存
存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快
2.3 混合存储
优先从本机内存中存取,如果没有则从数据库中存取
2.4 Redis
在redis中保存session,需要引入第三方扩展
使用django-redis
骚操作
添加session数据
request.session['name'] = 'wangpengbin'
获取session数据
name = request.session['name']
删除一条session数据
del request.session['name']
删除session的所有数据,保留key
request.session.clear()
删除session的所有数据,包括key
request.session.flush()
设置session的有效期
request.session.set_expiry(seconds)
总结
session是依赖于cookie的
第四部分:类视图
1. 定义
Django中也可以使用类来定义一个视图
定义类视图需要继承自Django提供的父类View
from django.views import View
2. 好处
使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义
代码可读性好
类视图相对于函数视图有更高的复用性
3.使用
配置路由时,使用类视图的as_view()方法
4.原理
路径匹配
url(r'^register/$', views.RegisterView.as_view())
as_view底层原理
调用as-view方法:
执行view方法:
执行dispatch方法:
格式
视图函数是根据请求方法的不同进行区分
视图类也是根据请求方法的不同而进行区分
类视图使用装饰器(共3种方式)
在URL配置中装饰
写法
url(r'^center/$',login_require(CenterView.as_view()),name='center'),
将视图函数名CenterView.as_view()放在装饰器的括号中
在类视图中装饰
前提
使用method_decorator将其转换为适用于类视图的装饰器
分析
method_decorator
参数1
装饰器的名字
参数2
name作用于dispatch