django的HTTP响应

django的HTTP响应(Response)

django和大多数的web框架一样,针对http的响应,提供了2种不同的响应方式:

  1. 响应内容,就是直接返回数据给客户端

    1. 响应html内容【一般用于web前后端不分离的项目】

    2. 响应json内容【一般用于开发web前后端分离的项目的api接口开发】

  2. 响应页面,就是通过返回页面跳转的信息给浏览器,让浏览器自己进行页面跳转

HttpResponse(content="正文内容",content_type="内容格式",status="http响应状态码")  //content_type 内容格式,默认是 text/html     status    响应状态码,默认是 200
JsonResponse(goods_list,safe=False) //如果返回非字典数据,务必设置 sale=False 才行

 

 

数据响应

返回HTML数据

def index5(request):
    """响应对象"""
    """
    return HttpResponse(content="正文内容",content_type="内容格式",status="http响应状态码")
    content_type 内容格式,默认是 text/html
    status       响应状态码,默认是 200
    """

    """返回html内容"""
    return HttpResponse("<h1>hello world</h1>")

返回Json

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"

 

posted @ 2021-07-05 19:39  Fleeting__Time  阅读(261)  评论(0编辑  收藏  举报