文章摘自北京理工大学嵩天老师云端入门系列课程,这里只是我个人的笔记。
视图函数编写原则
视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能
• 视图函数可以返回Web文本、页面、重定向、错误、图片等任何内容
• 视图函数通过HttpResponse、 JsonResponse等类表达并返回响应
• 按约定,视图函数放在对应app中的views.py文件中
Django的响应类型
django.http包含所有响应类型
• HttpResponse类及子类 (共10个)
• JsonResponse类
• StreamingHttpResponse类
• FileResponse类
(1) HttpResponse类及子类
类型 | 说明 |
---|---|
HttpResponse | 主要反馈类型,父类,HTTP状态码默认为200 |
HttpResponseRedirect | 重定向,HTTP状态码为302 |
HttpResponsePermanentRedirect | 永久重定向,HTTP状态码为301 |
HttpResponseNotModified | 网页无改动,该类型无任何参数,HTTP状态码为304 |
HttpResponseBadRequest | 不良响应,HTTP状态码为400 |
HttpResponseForbidden | 禁止访问,HTTP状态码为403 |
HttpResponseNotAllowed | 不被允许,HTTP状态码为405 |
HttpResponseGone | HTTP状态码为410 |
HttpResponseServerError | 服务器错误,HTTP状态码为500 |
HttpResponseNotFound | 404错误,HTTP状态码为404 |
HttpResponse(content,content_type=None,status=200,charset=None)
· content : 拟返回的字符串
· content_type : MIME格式的返回内容类型
· status : 响应状态码
· charset : 响应的字符集
首页路由设置
参考代码:
1.全局路由指定
path(’’, msgviews.homeproc),
2.编写全局路由指定函数
def homeproc(request):
(2) JsonResponse类
JsonResponse(data)
- data : 字典类型,返回的JSON类型数据
def homeproc1(request):
response = JsonResponse({‘key1’: ‘value1’})
return response
(3) StreamingHttpResponse类-流式响应
StreamingHttpResponse(streaming_content)
- streaming_content : 内容的迭代器形式,以内容流的方式响应
(4) FileResponse类
FileResponse(stream)
- stream : 以流形式打开后的文件
def homeproc2(request):
cwd = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
response = FileResponse(open(cwd + "/msgapp/templates/PyLogo.png", "rb"))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="pylogo.png"'
return response
Django请求类型的判断
• 路由不能判断HTTP请求的类型
• Django通过decorators在视图函数前进行基本判断,格式如下:
调库:django.views.decorators.http
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
####### I can assume now that only GET or POST requests make it this far
pass
Django视图流式响应机制见下文
https://blog.youkuaiyun.com/qq_41663800/article/details/93379532