视图函数编写原则
- 视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能
- 视图函数可以返回Web文本、页面、重定向、错误、图片等任何内容
- 视图函数通过HttpResponse、JsonResponse等类表达并返回响应
- 按约定,视图函数放在对应app中的views.py文件中
Django的视图响应类型 django.http包含所有的响应类型
- HttpResponse类及子类 (共10个)
- JsonResponse类
- StreamingHttpResponse类
- FileResponse类
HttpResponse类及子类 (共10个)
类型 | 说明 |
---|---|
HttpResponse | 主要反馈类型,父类, HTTP状态码默认为200 |
HttpResponseRedirect | 重定向, HTTP状态码为302 |
HttpResponsePermanentRedirect | 永久重定向, HTTP状态码为301 |
HttpRe sponseNotModified | 网页无改动,该类型无任何参数, 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:响应的字符集
看一下实例代码:在urls.py中定义一个路径以及方法。
随后使用httpresponse作为相应返回值的参数:导入相对应的HttpResponse包
再者对于HttpResponse而言,这是一个类,可以使用类进行返回:如下代码所示:
def homeproc(request):
response=HttpResponse()
response.write("<h1>这是一个首页,具体功能请访问</h1>")
response.write("<a href='./msggate'>链接</a>")
response.write("<h2>结尾</h2>")
return response
最后运行项目,在根目录下面会看到返回的页面:如下效果图所示:以上的俩段代码因为输出的html代码不同,但是基本差不多,
JsonResponse类及子类 (共10个)
JsonResponse返回的一个data是一个字典类型的json数据
如下代码所示:在urls文件中添加一个路径指向这个函数:在浏览器输出的时候就会出现一个字典类型的json数据
def homeproc1(resquest):
json=JsonResponse({'key':'value'})
return json
FileResponse类
以流的形式打开文件:使用以下方法:
def homeproc2(resquest):
c=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
response=FileResponse(open(c+"/msgapp/templates/3.png","rb"))
response['Content-Type']="application/octet-stream"
response['Content-Disposition']='attachment;filename="123.png"'
return response
在此,需要在templates目录下新加一个图片,如上:图片是3.png。
最后打开网址查看效果:当输入网址并回车后,会自动下载我们原先定义的图片,并且将下载的图片名定义成123.png