Django框架基础篇--响应HttpResponse相关知识点

目录

关于响应HttpResponse知识小天窗:

1. 使用 Django中的 HttpResponse 构造响应对象

2. JsonResponse:响应JSON

3. redirect():重定向

4. redirect()重定向 搭配 反向解析(难点)


关于响应HttpResponse知识小天窗:

  • 学习响应Response的目的:视图请求处理后 -->> 必使用 HttpResponse对象或者子对象 返回数据
  • 常见的响应 HttpResponse 四种方式:(接下来我们将从 4 个不同的方式进行分析)

1. HttpResponse(): 响应 多种数据类型

2. JsonResponse(): 响应 JSON数据

3. redirect(): 重定向

4. render(): 渲染响应HTML模板

  • 提示一下:

        在我们以上四中方法时,需要在视图中导入Django包中的 http 模块:from django import http


1. 使用 Django中的 HttpResponse 构造响应对象

  • 关于HttpResponse()中的参数知识点:

return http.HttpResponse(content="响应体数据",content_type="响应体数据类型",status="状态码")

  • 参数说明:

>> content="响应体数据" -->> 写入响应体数据

>> content_type="响应体数据类型,默认是text/html" -->> 响应体数据类型说明

>> status="状态码,默认为200" -->> 响应报文中的状态码

>> Django中提供的默认状态码(status)的分类:  我们可以快速设置状态码 
                 1. HttpResponseRedirect                      默认响应状态码为 301
                 2. HttpResponsePermanentRedirect    默认响应状态码为 302
                 3. HttpResponseNotModified              默认响应状态码为 304
                 4. HttpResponseBadRequest                默认响应状态码为 400
                 5. HttpResponseNotFound                   默认响应状态码为 404
                 6. HttpResponseForbidden                   默认响应状态码为 403
                 7. HttpResponseNotAllowed                默认响应状态码为 405
                 8. HttpResponseGone                           默认响应状态码为 410
                 9. HttpResponseServerError                  默认响应状态码为 500

  • 案例:

1. 视图(Views.py)中的代码

from django.shortcuts import render
from django.views import View
from django import http
import json

# Create your views here.

class Response1View(View):
    """测试HttpResponse() 响应多种数据
    http://127.0.0.1:8000/response1/
    """
    def get(self,request):
        # print(request)
        # 使用HttpResponse构造响应数据
        return http.HttpResponse(content="响应多种数据 -->> HttpResponse()")

2.注册子路由代码

from django.urls import path,re_path
from . import views


# 注册子路由
urlpatterns = [
    # 测试HttpResponse() 响应多种数据 http://127.0.0.1:8000/response1/
    path("response1/",views.Response1View.as_view()),
]

3. 运行结果


2. JsonResponse:响应JSON

  • 目的:前端需要JSON数据,那后端需要构造 JSON数据 响应给 前端
  • Django提供了 JsonResponse 构造并响应JOSN数据
  • JsonResponse 作用:

1. 将响应数据转换为JSON字符串

2. 设置响应头Content-Type为 application/json

1. 在views.py中编写以下代码

class Response2View(View):
    """测试JSONResponse
    http://127.0.0.1:8000/json_resp/
    """
    def get(self,request):
        # 响应数据
        dict_data = {
            "name":"Mr.lin",
            "age":18
        }

        # 使用JSONResponse构造并响应JSON数据
        return http.JsonResponse(dict_data)

2. 注册子路由

from django.urls import path,re_path
from . import views


# 注册子路由
urlpatterns = [
    # 测试JSONResponse http://127.0.0.1:8000/json_resp/
    path("json_resp/",views.Response2View.as_view()),
]    

3. 运行代码,返回结果


3. redirect():重定向

  • 目的:跳转页面时候用。比如:用户注册,登录成功后,直接将用户引导至网站首页
  • 采用 redirect()来实现 重定向 

1. 在views.py中写入一下代码(需要导入redirect  -->> from django.shortcuts import redirect)

"""-----------------------------redirect() 重定向---------------------------------"""
from django.shortcuts import redirect

class IndexView(View):
    """测试重定向
    http://127.0.0.1:8000/index/
    """
    def get(self,request):

        return http.HttpResponse('假装是一个首页界面')

class LoinRedirectView(View):
    """测试重定向
    http://127.0.0.1:8000/login_redirect/
    """

    def post(self,request):
        # 假装正在处理登录逻辑
        # 假装登录逻辑处理完成
        # ......

        # 将用户通过重定向引导到首页
        return redirect("/index/")

2. 注册子路由

from django.urls import path,re_path
from . import views


# 注册子路由
urlpatterns = [
    # 测试 redirect() 重定向
    # 首页路由 http://127.0.0.1:8000/index/
    path("index/",views.IndexView.as_view()),
    # 用户登录路由 http://127.0.0.1:8000/login_redirect/
    path("login_redirect/",views.LoinRedirectView.as_view())
]

3. 运行结果:


4. redirect()重定向 搭配 反向解析(难点)

  • 能否可以实现一种效果,可以保证即使在版本迭代时,使用了新设计的地址替换了路由中原有的地址,我们之前编写的使用该地址的代码不用去修改,达到动态获取的目的。
  • 解决方案:

路由反向解析:路由反向解析 是使用路由的别名,动态的解析出该路由中的真实地址

  • 具体操作:

1. 在主路由中,给子应用的总路由起别名 -->> path('', include(('子路由', '子应用名字'), namespace='总路由别名,可以随便命名')),

例如:

urlpatterns = [
    # 请求和响应
    # path('', include(('子路由', '子应用名字'), namespace='总路由别名,可以随便命名')),
    path('', include(('Request_Response.urls', 'Request_Response'), namespace='Request_Response')),
]

2. 子路由中,给子应用的子路由起别名 -->> path("index/",views.IndexView.as_view(),name="别名")

例如:

from django.urls import path,re_path
from . import views

# 注册子路由
urlpatterns = [
    # 测试 redirect() 重定向 和反向解析
    # 首页路由 http://127.0.0.1:8000/index/
    path("index/",views.IndexView.as_view(),name="index"),
    # 用户登录路由 http://127.0.0.1:8000/login_redirect/
    path("login_redirect/",views.LoinRedirectView.as_view())

]

3. 视图中,使用路由的别名,动态的解析出该路由中的真实地址 -->> return redirect("Request_Response:子路由别名")

"""------------------------redirect() 重定向 和 反向解析--------------------"""
class IndexView(View):
    """测试重定向
    http://127.0.0.1:8000/index/
    """
    def get(self,request):

        return http.HttpResponse('假装是一个首页界面')

class LoinRedirectView(View):
    """测试重定向
    http://127.0.0.1:8000/login_redirect/
    """

    def post(self,request):
        # 假装正在处理登录逻辑
        # 假装登录逻辑处理完成
        # ......

        # 将用户通过重定向引导到首页
        # ret_url = reverse('总路由别名:子路由别名')
        return redirect("Request_Response:index")

4. 运行的效果同 >> 3. redirect():重定向 ,效果一样,唯一解决了版本迭代时,不会那么麻烦的修改路由的问题


作为小白的我,希望大佬多多支持,谢谢!!!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值