首页 > 其他分享 >Django路由层相关知识

Django路由层相关知识

时间:2022-12-13 22:24:41浏览次数:42  
标签:return 知识 request 视图 Django 路由 view

昨日内容回顾

  • Django请求生命周期图

    处理一条请求与7个部分关联:

    客户端、网关服务接口、Django中间件、路由层、视图层、模板层、模型层。

  • Django路由层的匹配

    • 静态匹配

      匹配指定的路由。

    • 动态匹配

      分为转换器匹配和正则匹配。正则匹配又包含有名分组匹配与无名分组匹配。

    • 反向解析

      在HTML页面或后端界面进行动态匹配时,需要用到反向解析。

今日内容概要

  • 路由分发
  • 名称空间
  • 虚拟环境
  • request获取文件对象
  • 路由层返回数据要求
  • FBV与CBV
  • CBV原理解析
  • 模板层传值

今日内容详细

路由分发

路由分发的基础是Django允许每个app拥有自己独立的一套配置数据,包括路由、模板、视图等。当一个Django项目内含有多个app且每个app下有多个视图时,为了方便管理,在项目根目录下的路由层中,不会直接匹配请求的视图,而是将请求的视图分配给其所在的app,由其所在的app进行后续的操作,这就是路由分发。

路由分发的表现形式

项目根目录下路由中的路由匹配:
path('app_name/', include('app_name.urls')) # 使用include需要导入

名称空间

Django项目中的所有视图共享一个名称空间,当为不同项目下的视图指定相同的name时,仅有后被加载的视图可以生效,先加载的视图的名称会被覆盖。

为避免名称的覆盖问题,最简单的解决方式是指定名称时为视图添加当前app的前缀来区分,也可以在路由分发时指定视图所在的名称空间。

总路由
path('app01/', include(('app01.urls', 'app01'), namespace='app01')),
path('app02/', include(('app02.urls', 'app02'), namespace='app02')),
反向解析
reverse('app01:index_view')
reverse('app02:index_view')

虚拟环境

虚拟环境是已存在的程序运行环境的备份,虚拟环境是为了特定程序运行单独开设的,目的是为了保证程序运行环境的纯净,以节省空间。

创建虚拟环境的方法:

  1. 使用pycharm创建,操作较为简单,在创建新项目时选择虚拟环境即可;
  2. 命令行创建,指令为 python -m venv python_venv,最后一个单词为虚拟名称名字,可自定义。命令行创建虚拟环境需要手动启动activate文件以激活虚拟环境,使用deactivate文件关闭虚拟环境。

request获取文件对象

Django后端获取文件对象使用request. FILES。

使用该方法能获取到文件对象的前提是前端form表单使用了正确的提交方式。form表单中关于文件传输需要满足两个条件:

  1. method必须为post
  2. enctype必须为multipart/form-data

路由层返回数据要求

用来处理请求的视图函数返回的数据必须为HttpResponse对象。

视图函数返回数据有三种,为HttpResponse()、render()、redirect(),其本质都是返回了HttpResponse对象。

class HttpResponse:
    pass
return HttpResponse()	

def render():
    return HttpResponse()
return render()

def redirect():
    redirect_class = 类(祖先有个类是HttpResponse)
    return redirect_class()
return redirect()

FBV与CBV

FBV即以函数为基础的视图,即视图中实现功能主要通过功能函数。

CBV即以类为基础的视图,即视图中实现功能主要通过类的操作。本质也是通过类中定义的功能函数实现,不过可以通过定义特定的函数实现自动实现请求种类对应的操作。

CBV原理解析

定义相关视图类形式,可以看到继承了views中的View类:

class MyLoginView(views.View):

CBV路由匹配形式,需要调用类中的as_view函数:

path('login/', views.MyLoginView.as_view())

父类View的代码主体:

class View:
     @classmethod
     def as_view(cls, **initkwargs):
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            return self.dispatch(request, *args, **kwargs)
        return view
     def dispatch(self, request, *args, **kwargs):
         handler = getattr(self, request.method.lower())
         return handler(request, *args, **kwargs)

调用相关视图类的执行流程:

  1. 首先执行as_view函数,将views.MyLoginView.as_view()变换为views. view;
  2. 执行view函数,生成自定义类的对象,让后调用dispatch函数(需要注意查找顺序);
  3. 调用dispatch函数,获取request中的请求方式并转换为小写;
  4. 调用自定义类中的请求对应方式小写对应的函数。

模板层传值

Django模板语法主要格式:

"""
{{ }}    数据相关操作
{% %}    逻辑处理相关操作,调用函数时只需要写函数名
{# #}     注释语法,不会显示在前端页面上
"""

模板语法传值方式

  1. 使用字典形式传值,传值精准,值较多时不适用。
return render(request, 'html_name.html', {'name1': data1, 'name2': data2})
  1. 使用locals()传值,将该函数中所有名称及对应值传入,值多时适用。
return render(request,'html_name.html', locals())

模板语法传值特性

  1. python基本数据类型正常展示;
  2. 文件对象也可以展示并调用方法;
  3. 函数名会自动加括号执行并将返回值展示到页面上(不支持额外传参);
  4. 类名也会自动加括号调用,对象直接展示;
  5. 使用{{ 数据|内置方法名}}可以调用数据内置函数。

标签:return,知识,request,视图,Django,路由,view
From: https://www.cnblogs.com/akazukis/p/16980830.html

相关文章

  • Django之视图层
    目录视图层必会三板斧伪静态(了解)JsonResponse对象request对象获取文件FBV与CBVCBV源码解析模板层视图层django视图层:Django项目下的views.py文件,它的内部是一系列的函......
  • 路由分发 虚拟变量 JsonResponse对象 视图层CBV和FBV 模板层
    今日内容概要路由分发django支持每个应用都可以有自己独立的路由层、静态文件、模板层基于该特性多人开发项目就可以完全解耦合之后利用路由分发还可以整合到一起......
  • django视图层详解
    内容概要路由分发名称空间虚拟环境视图层必会三板斧视图层JsonResponse对象视图层request对象获取文件视图层FBV与CBVCBV源码剖析内容详细路由发分发django支......
  • django模板层
    模板层{{}}:主要是与数据值相关{%%}:主要与逻辑相关django的模板语法是自己写的跟jinja2不一样针对需要加括号调用的名字django模板语法会自动加括号调用,我们只需要......
  • 进入python的世界_day51_Django之视图层、模板层
    一、路由分发django中应用都可以有自己独立的urls.py文件templates文件夹static文件夹能够让基于django开发的多个应用完全独立便于小组开发能分能收整个dj项目下......
  • Django:视图层
    目录Django视图层编写视图一、视图函数必会三板斧1.HttpResponse()2.render3.redirect二、JsonResponse1.json模块进行序列化2.JsonResponse(1)实例(2)JsonResponse源码学习三......
  • django 04 视图层
    视图层三剑客(render,HttpResponse,redirect)#1.用于处理请求的视图函数都必须返回HttpResponse对象"""render,HttpResponse的底层都是HttpResponseredi......
  • django框架——路由分发、名称空间、虚拟环境、视图层
    django框架——路由分发、名称空间、虚拟环境、视图层一、路由分发 django支持每个应用都有自己独立的路由层、静态文件、模板层,基于该特性,多人开发的项目就可以完全的解......
  • 路由分发、名称空间、虚拟环境、视图层之必会三板斧、JsonResponse对象、视图层之requ
    路由分发如果一个django项目特别庞大,里面有很多应用,每个应用下有很多对应关系。那么django自带的路由层里面的代码就会非常非常的多。我们可以根据应用的不同拆分路由对......
  • 路由分发 、虚拟环境、 视图层之必会三板斧 、JsonResponse对象、 视图层之request对
    目录路由分发虚拟环境视图层之必会三板斧JsonResponse对象视图层之request对象获取文件视图层之FBV与CBVCBV源码剖析(重要)模板层路由分发django支持每个应用都可以有自......