马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
HttpRequest 和 HttpResponse
Django中的视图主要用来接受Web哀求,并做出响应。
视图的本质就是一个Python中的函数
视图的响应分为两大类
- 以Json数据情势返回(JsonResponse)
- 以网页的情势返回
- 重定向到另一个网页 (HttpResponseRedirect)
- 错误视图(4XX,5XX) (HttpResponseNotFound, HttpResponseForbidden, HttpResponseNotAllowed 等)
- 视图响应过程:
- 浏览器输入-> urls路由匹配 -> 视图响应 -> 回馈到浏览器
- 视图参数:
- 一个HttpRequest的实例,一般命名为request
- 通过ur1正则表达式传递过来的参数
- 位置:
通常在应用下的views.py中定义
- 错误视图:
- 404视图(页面没找到)
- 400视图(客户操作错误)
- 500视图(服务器内部错误)
HttpRequest
服务器在接收到Http哀求后,会根据报文创建HttpRequest对象
视图中的第一个参数就是HttpRequest对象
Django框架接收到http哀求之后会将http哀求包装为HttpRequest对象,之后传递给视图。
- request常用属性和方法:
- 属性:
- path 请求的完整路径
- method 请求的方法,常用GET, POST
- GET 类似字典的参数,包含了get的所有参数
- POST 类似字典的参数,包含了post所有参数
- FILES 类似字典的参数,包含了上传的文件
- COOKIES 字典,包含了所有COOKIE
- session 类似字典,表示会话
- META 一个字典,包含了请求的元信息,例如:
- 'REMOTE_ADDR' 客户端的IP地址
- 方法:
- is_ajax() 判断是否是ajax请求,通常用在移动端和JS中
- get_full_path() 返回包含参数字符串的请求路径
- QueryDict:
- 类似字典的对象。与字典的区别:可以存在相同的键。
- QueryDict中数据获取方式:
- dict['uname'] 或 dict.get('uname') 获取指定key对应的第一个值
- dict.getlist('uname') 获取指定key对应的所有值
复制代码 HttpResponse
- HttpResponse由程序员自己创建:
- 1)不使用模板,直接调用HttpResponse(),返回HttpResponse对象。
- 2)调用模板,进行渲染。
- 使用render
- render(request, template_name[, context])
- request 请求体对象
- template_name 模板路径
- context 字典参数,用来填坑
- 属性:
- content 返回的内容
- charset 编码格式
- status_code 响应状态码(2xx, 3xx, 4xx, 5xx)
- 方法:
- write(xxx) 直接写出文本
- flush() 冲刷缓冲区
- set_cookie(key, value='xxx', max_age=None) 设置cookie
- delete_cookie(key) 删除cookie
- HttpResponse子类
- HttpResponseRedirect
- 响应重定向:可以实现服务器内部跳转
- return HttpResponseRedirect('/grade/2030')
- 使用的时候推荐使用反向解析
- JsonResponse
- 返回Json数据的请求,通常用在异步请求上
- JsonResponse(dict)
- 返回json数据时, Content-type是application/json
复制代码 views.py
- from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
- from django.shortcuts import redirect, render
- # Create your views here.
- def myrequest(request):
- print(request) # <WSGIRequest: GET '/request/?name=lisi&age=18'>
- # request对象的属性和方法
- print(request.method) # GET / POST/ PUT/ DELETE
- print(request.GET) # QueryDict对象(类字典对象,可以使用字典方法),包含GET请求参数
- print(request.GET['name']) # 如果name不存在,会报错
- print( request.GET.get('name')) # 如果name不存在,返回None或者默认值
- print(request.GET.getlist('name')) # 如果name不存在,返回空列表, 否则返回列表
- print(request.POST) # QueryDict对象,包含POST请求参数
-
- print(request.path) # 请求路径/request/
- print(request.get_full_path()) # 请求完整路径 (包含查询字符串)/request/?name=lisi&age=18
- print(request.COOKIES) # 字典对象,包含cookie信息
- print(request.session) # 字典对象,包含session信息
- print(request.FILES) # 如果是上传文件,返回一个文件对象,否则返回None,前端上传的文件
- # print(request.META) # 字典对象,包含HTTP请求头信息
- print(request.META['REMOTE_ADDR'])
- return HttpResponse("Hello Django!")
- def myresponse(request):
- # 1. 直接返回字符串
- # return HttpResponse("Hello Django!")
- # 2. 传入模板文件, 前后端不分离
- # return render(request, 'index.html')
- # 3. 重定向, redirect, reverse
- # return redirect('/request/')
- # return HttpResponseRedirect('/request/')
- # 4. 返回json数据, 前后端分离的方式
- # data = {'name': 'lisi', 'age': 18}
- # return JsonResponse(data)
- response = HttpResponse()
- response.content = 'Hello Django!'
- response.status_code = 200
- return response
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |