#细节都在代码段里面讲解
零、绪论:
HTTP协议是一种请求响应的协议,一次请求一次响应。所以这部分的讲解将分为三个部分:请求获取,分析处理、返回响应。
一、获取请求数据:
1、POST和GET类型
1 #GET/POST 2 request.GET["para_name"] 3 request.POST["para_name"] 4 #都是字典可以使用get方法 5 #对于方法的选择: 6 HttpRequest.method==GET#或者POST或者其他
2、其他类,例如PUT和DELETE,其他的也不多了,OPTIONS 不带数据
1 put = QueryDict(request.body) 2 key = put.get('key') 3 field = put.get('field') 4 field_value = put.get('field-value') 5 6 #把request.body也就是请求报文体,结构化成QueryDict,看情况,有时候数据体部分也可能是json化的。delete同理
3、文件类型:
1 #FILES: 2 fileobject = request.FILES.get("para_name") 3 filename = fileobject.name 4 filesize = fileobject.size 5 filetype = fileobject.content_type 6 filecontent = fileonject.read 7 filecharset =fileobject.charset 8 #上传文件配置限制: 9 FILE_UPLOAD_MAX_MEMORY_SIZE 10 #直接读入内存的最大上传文件大小(字节数)。当大于此值时,文件存放到磁盘。默认2.5M字节 11 FILE_UPLOAD_TEMP_DIR 12 FILE_UPLOAD_PERMISSIONS#权限 13 FILE_UPLOAD_HANDLERS 14 #对于表单上传文件的一个简单处理: 15 def handle_uploaded_file(f): 16 destination = open('some/file/name.txt','wb+') 17 for chunk in f.chunks(): 18 destination.write(chunk) 19 destination.close()
4、请求头部字段:
1 head = request.META 2 #这是一个字典,所有和请求甚至和响应有关的上下文结构都在里面,所以头部字段也在里面 3 #例如想要取出user-agent 4 useragent = head["HTTP_USER_AGENT"]
5、session和cookies
1 #cookie直接获取cookie是一个字典 2 cookie = request.COOKIES 3 csrftoken = cookie["csrftoken"] 4 #session也是一个字典结构: 5 request.session["admin"] 6 request.session.get("admin") 7 #对这些的cookie和session的处理我们将在数据处理部分做介绍
6、user
1 #AUTH_USER_MODEL 的一个实例对象 2 #用来表明当前用户,匿名用户时候则为id为None,username为空字符串。 3 #常见的字段:id username group password 4 is_active 5 is_staff 6 is_superuser 7 #常见的函数: 8 is_authenticated() 9 is_anonymous() 10 set_password() 11 check_password() 12 get_username() 13 save() 14 delete()
7、其他请求上下文属性:
1 HttpRequest.scheme#协议,一般为http或者https 2 HttpRequest.body#数据部分,可以使用HttpRequest.read()获取 3 HttpRequest.path(path_info)#关于请求的路径部分信息 4 HttpRequest.encoding#请求的编码方式 5 HttpRequest.REQUEST#一个字典,相当于POST和GET的字典合集
8.关于上下文的一些方法:
1 HttpRequest.get_host() 2 HttpRequest.get_full_path() 3 HttpRequest.get_build_absolute_uri() 4 #HttpRequest.get_signed_cookie() 5 HttpRequest.is_secure()#是否是HTTPS 6 HttpRequest.is_ajax()#是否为Ajax请求 7 HttpRequest.read() 8 HttpRequest.readline() 9 HttpRequest.readlines() 10 HttpRequest.xreadlines()