django的HTTP响应
django和大多数的web框架一样,针对http的响应,提供了2种不同的响应方式:
-
响应内容,就是直接返回数据给客户端
-
响应html内容【一般用于web前后端不分离的项目】
-
响应json内容【一般用于开发web前后端分离的项目的api接口开发】
-
-
响应页面,就是通过返回页面跳转的信息给浏览器,让浏览器自己进行页面跳转
HttpResponse(content="正文内容",content_type="内容格式",status="http响应状态码") //content_type 内容格式,默认是 text/html status 响应状态码,默认是 200
JsonResponse(goods_list,safe=False) //如果返回非字典数据,务必设置 sale=False 才行
def index5(request): """响应对象""" """ return HttpResponse(content="正文内容",content_type="内容格式",status="http响应状态码") content_type 内容格式,默认是 text/html status 响应状态码,默认是 200 """ """返回html内容""" return HttpResponse("<h1>hello world</h1>")
from django.http.response import JsonResponse import json def index5(request): """响应对象""" """返回json数据""" # data = { # "id":1, # "username":"张晓明", # "money": 22.50, # "sex":True, # "lve":["swimming","walk","game"] # } # goods_list = [ # {"id":1,"num":10,"name":"产品1"}, # {"id":2,"num":10,"name":"产品2"}, # {"id":3,"num":10,"name":"产品3"}, # {"id":4,"num":10,"name":"产品4"}, # ] # # 方式1,如果返回非字典数据,务必设置 sale=False 才行. # # return HttpResponse(json.dumps(data), content_type="application/json") # # 方式2,如果返回非字典数据,务必设置 sale=False 才行. # return JsonResponse(goods_list,safe=False)
def index5(request): """响应对象""" """通过响应对象不仅可以返回HTML网页信息,还可以返回纯文本,或者图片,甚至完成文件下载的功能[这个过程只需要设置content_type即可]""" # content = open("release.png","rb").read() # return HttpResponse(content,content_type="image/jpeg")
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): """响应对象""" """返回数据的过程中设置响应头""" response = HttpResponse("ok") # 自定义响应头[值和属性都不能是多字节] response["company"] = "oldboyedu" return response
# 跳转到站外 def index5(request): """响应对象""" from django.shortcuts import redirect # 方式1 # return HttpResponseRedirect("http://www.baidu.com") //通过返回网站的形式跳转 # 方式2 # return redirect("http://www.baidu.com") //从定向跳转
# 跳转到站内 def center(request): # 方式1 # return redirect("/student/login") # 方式2 print( reverse("stu:user_login") ) # 路由反转,自动根据编写的视图方式名反解析成url地址 return redirect( reverse("stu:user_login") //("stu:login")是由主路由的别名和子路由的别名组成的键值对 ("子应用包别名:当前包的路由别名") def login(request): return HttpResponse("登录页面")
在站内跳转时,如果使用reverse进行路由反转解析,则必须在总路由和子路由文件中,对路由的前缀和子路由进行别名绑定.方法如下:
# 总路由 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") ), ] # 子路由文件,例如: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"