知其然亦要知其所以然
views每个方法的参数都是request,那么问题来了,request为何物?
首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前端。而前端请求数据,就会向后端发送一个http请求,这个请求的请求路径,经过urls,会调用url中指定的方法。此时django就会将HttpRequest对象作为第一个参数传入此方法。故,request即为一个httpRequest对象。
然后,出现了一个新问题,httpRequest是什么,又含有什么属性和方法?
- httpRequest类定义在django.http中
- httpRequest对象是由django自动创建的
常见属性:
- HttpRequest.method 字符串类型,表示所用的http方法
- HttpRequest.content_type 指content_type头解析的请求的MIME类型
- HttpRequest.content_params 指content_type标题中的 k/v参数字典
- HttpRequest.GET 此为一个字典一样的对象,里面有get请求中的所有参数
- HttpRequest.POST 此亦为一个字典一样的对象,里面有post请求表单中数据
- HttpRequest.COOKIES 此仍为一个字典一样的对象,包含所有的cookie数据
- HttpRequest.session : SessionMiddleware中间件,可读写的,为一个字典一样的对象,表示当前会话。我们要保存用户状态,回话过程等等,需要利用此中间件
- HttpRequest.user : AuthenticationsMiddleware中间件:表示当前登录用户的AUTH_USER_MODEL实例,若未登录,贼user为AnonymousUser实例
QueryDict:
在HttpRequest 对象中,属性 GET 和 POST 得到的都是 django.http.QueryDict 所创建的实例,此亦为一个类似于字典一样的类。
经常用的方法为QueryDict.get(key,default) ,返回key对应的值,若对应多个值,则返回最后的值,若key不存在,则返回默认值。