Django HttpResponse响应

1.HttpResponse

1)Django服务器接收到客户端发送过来的请求后,会将提交上来的数据封装成httpRequest对象传给视图函数。那么视图处理完相关逻辑后,也需要返回一个响应给浏览器。而这个响应必须返回HttpResponseBase或者他的子类的对象
2)可以使用django.http.HttpResponse来构造响应对象
3) HttpRequest对象由Django创建,HttpResponse对象或子对象由开发人员创建。

response = HttpResponse(content=响应体, content_type=响应体数据类型,默认为text/html, status=状态码,默认为200)

class TestQuery(View):

    def get(self, request):
    	#HttpResponse默认返回的是html字符串类型的数据,
    	#如果我们要响应html字符串以外的数据该如何实现?
    	#比如要响应图片格式
    	#HttpResponse(content=图片的原始数据, content_type=响应体数据类型,默认为image/jpg, status=状态码,默认为200)
        response = HttpResponse('test')
        return response

在这里插入图片描述

在这里插入图片描述

2. JsonResponse:响应JSON

1)在开发功能时,如果前端需要JSON数据,那么后端就需要构造并响应JSON数据,这也是我们在开发中使用最多的。
2)而Django提供了JsonResponse来构造并响应JSON数据
3)JsonResponse作用:
帮助我们将响应的数据转换为JSON字符串
设置响应头Content-Type为 application/json

class TestQuery(View):

    def get(self, request):
        # 准备要响应的数据
        dict_data = {
            'name': 'lx',
            'age': 100
        }
        # 使用JSONResponse构造并响应JSON数据
        return JsonResponse(dict_data)

在这里插入图片描述

3. redirect():重定向

在开发中,我们经常会遇到一种需求,当某个逻辑操作完成后,将用户引导到另外一个逻辑、页面中
比如:用户注册、登录成功后,直接将用户引导到网站首页

解决办法:可以使用重定向

redirect():重定向
from django.shortcuts import render, redirect

class Index(View):
  

    def get(self, request):
        return HttpResponse('网站首页')

class LoginView(View):
   
    def post(self, request):       
 	     return redirect('/index/') #别忘了 路径前面要加反斜线表示根路径

在这里插入图片描述

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

1)首先要考虑的问题是,我们要重定向的地址会不会更改会不会在某次版本更新迭代的时候被修改,如果很多地方都用到了这个地址那么是不是这些地方都要做修改?
需求:
能否可以实现一种效果,可以保证即使在版本迭代时,使用了新设计的地址替换了路由中原有的地址,我们之前编写的使用该地址的代码不用去修改,达到动态获取的目的。.

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

总路由

urlpatterns = [
    path('admin/', admin.site.urls),
    #这里的namespace是可以使用任意的名字,但是为了易于理解可以使用子应用的名字
        # 如果定义了namespace,那么一定要定义app_name 不然会报错
    path('', include(('pratice_1.urls',"pratice_1"),namespace="pratice_1"))
]

子路由

urlpatterns = [

    # 测试重定向
    path('login/', views.LoginView.as_view()),
    # 给要跳转的目标地址起别名,这个名字也可以随便写,但是最好写一个见文知意的
    path('index/', views.Index.as_view(),name='index'),
]

class Index(View):


    def get(self, request):
        return HttpResponse('网站首页')


class LoginView(View):


    def post(self, request):
                                #总路由别名:子路由别名
        redirect_url = reverse('pratice_1:index')
        #要跳转的目标地址
        return redirect(redirect_url)

include() 源码
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值