首页 > 技术文章 > django-HTTP协议的请求和响应

chenlulu1122 2019-11-21 19:23 原文

#HTTP协议的请求和响应
from django.http import *
from django.shortcuts import render
def index(request):
return HttpResponse('首页')

视图函数第一个必带参数request是http请求HttpRequest的 对象
返回值 HttpResponse('首页')是Django中的响应 对象


request的属性:

request.path_info :请求的url路径 http://127.0.0.1:8000/index?name=chen&age=18 只能得到'http://127.0.0.1:8000/index'
request.get_full_path() : 请求的完整路径 可以得到全部 'http://127.0.0.1:8000/index?name=chen&age=18'

request.method :请求的方式 常用的:'GET' 'POST' 'HEAD'

| 1 | GET | 请求指定的页面信息,并返回实体主体。 |
| 2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
| 3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中
| 4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 | 数据全部更新 PATCH局部更新
| 5 | DELETE | 请求服务器删除指定的页面。 | 删除
| 6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 | FQ
| 7 | OPTIONS | 允许客户端查看服务器的性能。 | 跨域
| 8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |


request.GET :QueryDict查询字典的对象,包含所有get请求方式的所有数据 request.GET
request.POST: QueryDict查询字典的对象, 表单post 请求方式的所有数据
request.body: 字符串,请求体的内容(非表单POST或PUT)
取值参考dict使用:request.GET.get('name')

request.META : 请求中的元数据(消息头)
request.META['REMOTE_ADDR'] : 客户端IP地址

request.scheme : 请求协议('http'/'https')
request.get_host() : 请求的主机

HttpResponse的属性:

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

content:表示返回的内容
content_type:指定返回数据的的MIME类型(默认为"text/html")
'text/html'(默认的,html文件)
'text/plain'(纯文本)
'text/css'(css文件)
'text/javascript'(js文件)
'multipart/form-data'(文件提交)
'application/json'(json传输)
'application/xml'(xml文件)

status:状态码
| HttpResponseRedirect | 重定响 | 302 |
| HttpResponseNotModified | 未修改 | 304 |
| HttpResponseBadRequest | 错误请求 | 400 |
| HttpResponseNotFound | 没有对应的资源 | 404 |
| HttpResponseForbidden | 请求被禁止 | 403 |
| HttpResponseServerError | 服务器错误 | 500 |

重定向过程:
1.当服务器返回302重定向响应时,响应头会携带Location:url,标明此次响应
需要浏览器帮忙跳转到(url),2.浏览器拿到Location(url),会把地址栏改为url,
并触发一次get请求,访问当前的url页面

#一般逻辑处理

def index(request):
if request.method=='GET':
  逻辑处理
elif request.method=='POST':
  逻辑处理

 

#注意事项:
request.GET 只能接收GET提交

request.POST 只能接收 表单POST提交
request.body 接收非表单POST提交
识别表单POST提交 请求头:
Content-Type:application/x-www-form-urlencoded


表单提交空相当于 "http://xxxxxxxx?name=&passwd="
视图函数request.POST.get('name')='' 而不是默认的None (表单单选框复选框除外)

推荐阅读