Django1.11基础视图
Django视图
路由命名与reverse反解析
在项目urls中的include函数,使用namespace参数定义路由命名空间
- url(r'^',incude('book.urls',namespqce='book'))
- 命名空间表示,凡是book.urls中定义的路由,均属于namespqce指明的book名下
- 命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开
定义普通路由时,采用name参数指明路由的名字
根据路由的名称,返回具体的路径
- reverse('namespace:name')
- reverse('name')
HttpRequest对象
from django.http import HttpResponse
Url路径参数
- 127.0.0.1:8000/book/1/200
- 路由中使用正则分组接受
- url(r('book/(?P<cat_id>\d+)/(?P<goods_id>\d+)'), views.get_url)
- 视图中接受关键字参数
- def get_url(request,cat_id,goods_id):
Django中的QueryDict对象
- 可以一键多值的字典
- HttpResponse对象的属性GET,POST获取的都是QueryDict对象
- get('键', 默认值)
- 获取此键的值,获取不到返回默认值
- getlist('键',默认值)
- 获取此键的所有值,获取不到返回默认值
查询字符串Query String
- 127.0.0.1:8000/book?k1=v1&k2=v2&k2=v3
- 查询字符串不区分请求方式,即使客户端进行POST方式进行请求,依然可以通过request.GET获取请求中的查询字符串数据
- def get_str(request):
dict = request.GET
v1 = dict.get('k1')
v2_v3 = dict.getlist('k2')
return HttpResponse('get_str_ok')
请求体
- 表单类型Form Data
- 表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象
- def get_form(request):
dict = request.POST
v1 = dict.get('k1')
v2_v3 = dict.getlist('k2')
return HttpRequest('get_form_ok')
- 非表单类型Non-Form Data
- 非表单类型的请求数据,Django无法自动解析,
通过request.body属性获取原始的请求数据,自己按照请求体格式(JSON,XML)手动解析
request.body返回bytes类型- JSON数据
- import json
- def post_json(request):
json_str = request.body
req_data = json.loads(json_str)
- JSON数据
获取到字典
return HttpResponse('ok') - 非表单类型的请求数据,Django无法自动解析,
请求头
- request.META
- 获取请求头中的数据,返回字典类型
其他HttpRequest对象属性
- request.methos
- request.user
HttpResponse对象
HttpResponse
- from django.http import HttpResponse
- HttpResponse(,content=响应体,content_type=响应体数据类型,status=状态吗)
- response = HttpResponse(响应体)
response.status_code=400 # 状态码
response['itcast'] = 'python' # 自定义响应头
return response
HttpRespnse子类
- 快速设置状态吗
JsonResponse
- 自动将数据转换为json字符串
自动设置响应头Content-type为application/json- return JsonResponse({'city': 'beijing', 'subject': 'python'})
redirect重定向
- return redirect('/get_header')
状态保持
Cookie
- 设置Cookie
- HttpResponse.set_cookie(cookie名,value=cookie值,max_age=cookie有效期)
- 读取cookie
- request.COOKIES
- 返回字典类型数据
- request.COOKIES
- 删除cookie
- response.delete_cookie('cookie键')
Session
- Django默认启用session
- session存储的位置
- 数据库
- 本地缓存
- 混合存储
- redis:分布式
- session操作
- request.session['键']=值
- 设置session
- request.session.get('键',默认值)
- 获取session
- request.session.clear()
- 删除session值
- request.session.flush()
- 删除session键和值
- del request.session['键']
- 删除指定键和值
- request.session.set_expiry(value)
- 设置有效期
- value是一个整数,则value秒后过期
- value为0,会话结束过期
- value为None,采用默认有效期,两周
- request.session['键']=值
XMind: ZEN - Trial Version
https://www.cnblogs.com/serpent/