django 学习笔记-视图响应
视图响应
视图响应数据
django和大多数的web框架一样,针对http请求的响应,提供了2种不同的响应方式:
1 . 响应内容
就是直接返回数据给客户端
( 1 ) 响应html内容【一般用于web前后端不分离的项目】
( 2 ) 响应json内容【一般用于开发web前后端分离的项目的api接口开发】
home/views.py 视图函数代码
def json(request):HttpResponse的内容
'''在postman里面的下半部分body里面获取响应内容,就是测试结果'''
1 . 响应内容:HttpResponse的内容,在客户端显示内容
return HttpResponse("hello")
# 通过django.http.response.HttpResponse 默认响应html内容
HttpResponse参数说明:
# 参数1:content, 响应正文的内容
# 参数2:status, 响应状态码
# 参数3:content-type,响应内容的MIME类型
rep = HttpResponse(content="hello",
status=206,
content_type="text/html")
return rep
2 . 返回响应内容的数据格式
# (1) 返回HTML数据 text/html
rep = HttpResponse(content="<h1>响应</h1>",
status=206,
content_type="text/html")
return rep
## (2) 返回json格式数据application/json
content = {
"name":"xiaoming",
"age": 32,
"son":{
"name":"xiaoxiaoming",
"age": 5,
}
}
# 将以上字典转json字符串返回去
import json
content = json.dumps(content)
return HttpResponse(content=content,
status=206,
content_type="application/json"
)
'''JsonResponse 就相当于把数据json化之后的内容返回,一步完成'''
from django.http.response import JsonResponse
content = {
"name":"xiaoming",
"age": 32,
"son":{
"name":"xiaoxiaoming",
"age": 5,
}
}
如果返回字典数据,直接用JsonResponse(),不用再转换成json格式,直接返回json数据.
content = [
{"id":10,"title":"javascript从入门到放弃", "price":10},
{"id":11,"title":"java从入门到放弃", "price":10},
]
#####** django中要返回列表格式的json数据,需要在响应参数中设置safe=False
return JsonResponse(content,safe=False)
"""通过响应对象不仅可以返回HTML网页信息,还可以返回纯文本,或者图片,甚至完成文件下载的功能[这个过程只需要设置content_type即可]"""
# (3) 返回 图片信息 image/png
# 常用于开发中,防盗链,资源防盗,资源下载
content = open("release.png","rb").read()
return HttpResponse(content=content, status=206, content_type="image/png")
# (4)提供下载支持
def index5(request):
"""响应对象"""
"""还可以是其他格式数据,用于提供下载"""
# with open("./basic-2.2.1.zip","rb") as f:
# content = f.read()
# return HttpResponse(content,content_type="application/x-zip-compressed")
自定义响应头
def index5(request):
"""响应对象"""
"""还可以是其他格式数据,用于提供下载"""
# with open("./basic-2.2.1.zip","rb") as f:
# content = f.read()
# return HttpResponse(content,content_type="application/x-zip-compressed")
2 . 响应页面:
就是通过返回页面跳转的信息给浏览器(客户端),让浏览器自己进行页面跳转,获取数据
#(1) 跳转到站外
def index5(request):
"""响应对象"""
from django.shortcuts import redirect
# 方式1
# return HttpResponseRedirect("http://www.baidu.com")
# 方式2
# return redirect("http://www.baidu.com")
#(2) 跳转到站内
def center(request):
# 方式1
# return redirect("/student/login")
# 方式2
print( reverse("stu:user_login") ) # 路由反转,自动根据编写的视图方式名反解析成url地址.但在子应用urls文件中要加上app_name = "student"( 当前子应用的包名)
return redirect( reverse("stu:user_login") )
def login(request):
return HttpResponse("登录页面")
在站内跳转时,如果使用reverse进行路由反转解析,则必须在总路由和子路由文件中,对路由的前缀和子路由进行别名绑定.方法如下:
##(1) 总路由文件demo/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
# path('home/', include('home.urls',namespace="应用别名") ),
path('student/', include('demo.student.urls',namespace="stu") ),
]
## (2)子路由文件,例如:student/urls.py
from django.urls import path
from . import views
app_name = "student" # 当前子应用的包名
urlpatterns = [
# path("index", views.index ),
# path("index2", views.index2 ),
# path("index3", views.index3 ),
path("center", views.center ),
path("login", views.login, name="user_login" ),
]

浙公网安备 33010602011771号