002--Django基础(Mixin扩展类 和 HttpResponse响应对象)

1. 类视图Mixin扩展类


使用面向对象多继承的特性,可以给类视图定义扩展类。
在扩展类中,可以定义想要向类视图补充的方法。
类视图继承这些扩展类作为父类,便可实现代码复用。


class ListModelMixin(object):
    """list扩展类 """
    def list(self, request, *args, **kwargs):
        pass

class CreateModelMixin(object):
    """create扩展类 """
    def create(self, request, *args, **kwargs):
        pass

class TestMixinView(CreateModelMixin, ListModelMixin, View):
    """同时继承两个扩展类,复用list和create方法"""
    def get(self, request):
        self.list(request)
        pass

    def post(self, request):
        self.create(request)
        pass



2. 路由定义的位置和解析的顺序

path和re_path和url区别:
path():需要完全匹配url,没有正则
re_path(), url(): 正则表达式中,注意要有开头和结尾
定义位置:

  1. 总路由 : include("")
  2. 子应用的路由 : path(r"", views.index)

解析的顺序:
总路由中的urlpatterns列表中以由上至下的顺序查找路由
发现规则为include包含,再进入被包含的urls中的urlpatterns列表由上至下的顺序查找路由


3. HttpResponse响应对象


HttpResponse():响应多种数据类型
JsonResponse():响应JSON
redirect():重定向
render():渲染并响应HTML模板

补充:HttpResponse子类


Django提供了一系列HttpResponse的子类,可以快速设置状态码
HttpResponseRedirect 默认响应状态码为 301
HttpResponsePermanentRedirect 默认响应状态码为 302
HttpResponseNotModified 默认响应状态码为 304
HttpResponseBadRequest 默认响应状态码为 400
HttpResponseNotFound 默认响应状态码为 404
HttpResponseForbidden 默认响应状态码为 403
HttpResponseNotAllowed 默认响应状态码为 405
HttpResponseGone 默认响应状态码为 410
HttpResponseServerError 默认响应状态码为 500

3.1 JsonResponse响应对象

在开发功能时,如果前端需要JSON数据,
那么后端就需要构造并响应JSON数据

JsonResponse作用:
帮助我们将响应的数据转换为JSON字符串
设置响应头Content-Type为 application/json

response = JsonResponse(字典数据)

在这里插入图片描述

在这里插入图片描述

3.2 redirect 重定向


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

path('login_redirect/', views.LoginRedirectView.as_view()),
path('index/', views.IndexView.as_view()),
from django.shortcuts import render, redirect

class IndexView(View):
    """测试重定向
    http://127.0.0.1:8000/index/
    """

    def get(self, request):
        return http.HttpResponse('假装这是个网站首页')


class LoginRedirectView(View):
    """测试重定向
    http://127.0.0.1:8000/login_redirect/
    """
    def post(self, request):

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

在这里插入图片描述


3.3 路由命名和reverse反解析

一旦地址变了,所有用到这个地址的地方,代码都需要修改,还可能会修改很多个地方的代码
而同时修改多个地方的代码,在开发中是个很危险的动作,而且也有一定的工作量


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


总路由

总路由中,给子应用的总路由起别名

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

在这里插入图片描述

子路由

子路由中,给子应用的子路由起别名

urlpatterns = [
    # 测试重定向
    path('login_redirect/', views.LoginRedirectView.as_view()),
    path('index/', views.IndexView.as_view(), name='index'),
]

在这里插入图片描述

路由命名作用:
定义路由时,为路由命名,方便查找特定视图的具体路径信息

reverse反解析作用:
根据 路由名称 反向推理获取到 url路由地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值