csrftoken QKrHLaRIXhoAdeMYSOvkvmqVLXv5nyoZRVqme5fbsEf7F1nhT3oKFSmtp6wYSluE
sessionid ftlkhm23nvo1t2einsfqjpxyyt860mvm
<WSGIRequest: GET '/blog/?title=dd&body=ddd'>
---------------------
{'csrftoken': 'QKrHLaRIXhoAdeMYSOvkvmqVLXv5nyoZRVqme5fbsEf7F1nhT3oKFSmtp6wYSluE', 'sessionid': 'ftlkhm23nvo1t2einsfqjpxyyt860mvm'}
---------------------
<class 'django.core.handlers.wsgi.WSGIRequest'>
<QueryDict: {u'body': [u'ddd'], u'title': [u'dd']}>
dd
ddd
Cookies和会话(Session):
说完了GET和POST,请求对象里接下来最常用的就是request.COOKIES,它也是一个字典,
代表了存储在请求里的HTTP cookies.
cookies是网页里一种在用户浏览器里存放持久化信息的手段---
大多数网站的认证系统都会用到它。
通常来说,大多数cookies都是用来支持一个叫做会话(session)的特性,
这代表一个网页可以向浏览器要求一个能标识用户的值(这个信息可以在用户首次连接网站或是登陆的时候设置),
然后用这个信息来为那个用户提供定制行为的页面。
由于cookies在客户端可以被轻易修改,所以存放关键数据是很不安全的,
大多数网站都会选择把信息存放在一个服务器端的会话对象里 只在cookies里保留一个唯一的会话ID。
其他服务器变量:
前面讲到的都是请求对象是最常用的属性,不过请求对象里还有很多其他变量,这些变量都是只读的。
path:URL 里域名后的部分,例如,/blog/2007/1/04,这个通常也是URLconf要处理的字符串:
print req.COOKIES
print req.path
{'csrftoken': 'QKrHLaRIXhoAdeMYSOvkvmqVLXv5nyoZRVqme5fbsEf7F1nhT3oKFSmtp6wYSluE', 'sessionid': 'ftlkhm23nvo1t2einsfqjpxyyt860mvm'}
/blog/
method:"GET"或"POST" 两者之一,表明了这个请求用的是哪一个HTTP请求方法
{'csrftoken': 'QKrHLaRIXhoAdeMYSOvkvmqVLXv5nyoZRVqme5fbsEf7F1nhT3oKFSmtp6wYSluE', 'sessionid': 'ftlkhm23nvo1t2einsfqjpxyyt860mvm'}
/blog/
GET
print req.COOKIES
print req.path
print req.method
encoding:表妹了用来解码表单提交数据所需的编码字符集的字符串:
响应对象:
到此,你已经读入传递视图函数的信息了,现在我们来看看负责返回的响应。
对我们来说,响应比请求更简单一点---。
最常用的方法就是创建响应对象---HttpResponse接受一个字符串作为构造函数的参数,并将它保存到content里。
print '------------------------------------------'
#return HttpResponse(template.render(context, req))
return HttpResponse("<html>this is a tiny web page!</html>")
这样就有了一个完整的响应对象,可以返回给web服务器并转发给用户浏览器了。
中间件:
虽然Django应用程序的基本流程还是比较简单的(接受请求,找到适合的视图函数,返回响应),
不过还可以在上面加注更多层次来变得更灵活强大。
其中之一就是中间件(middleware)---这些Python函数可以在上述过程里的多个地方执行来改变整个应用程序的输入
5.3 视图和逻辑:
视图(也叫控制器)是所有Django Web应用程序的核心,因为它们提供了几乎所有的实际的程序逻辑。
在定义和使用模型的时候,我们是数据库管理员,在编写模板的时候,我们是界面设计师,
而在编写视图的时候,我们才是真正的软件工程师
就是Python函数:
本质上来说,Django视图就是Python函数那么简单,对视图函数的唯一要求就是它们必须接收一个
HttpRequest 对象并返回一个HttpResponse对象。