今日内容详细

路由分发

​ django的每一个应用都可以有自己独立的路由层(urls.py)静态文件(static文件夹)模板层(templates文件夹)

​ 基于这个特性多人开发项目就可以完全解耦和 之后利用路由器分发还可以整合在一起

  • 路由器分发解决的就是项目的总路由匹配过多的情况

  • 利用路由分发的特性之后 总路由不再干路由与视图函数的直接对应关系

  • 总路由做分发处理 识别当前urls是属于哪个app下的 直接分发到对应的应用去处理

  • 请求来了之后 总路由不做对应关系 只询问你要访问哪个app的功能 然后将请求转发给对应的app去处理

    总路由分发配置

    1.在app目录下创建一个urls.py文件
    2.导入一个include模块(主路由 子路由)
    主路由:
    from django.urls import path,include urlpatterns = [
    path('admin/', admin.site.urls),
    #路由分发
    path('app01/',include('app01.urls')),
    #只要是app01的 全部交给app01处理
    path('app02/',include('app02.urls'))
    #只要是app02的 全部交给app02处理
    ]
    子路由正常写 路由与函数视图对应关系
    '''
    在访问的时候要指定是找哪一个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')

方式二:别名不冲突即可

多个应用别名不冲突可以用应用名作为别名的前缀
path('index/',views.index_func,name='app_01index_view')
path('index/',views.index_func,name='app_02index_view')

虚拟环境

当不同的项目需要使用不同版本的模块时 我们需要用到不同的模块 浪费空间 有些还需要卸载 很麻烦
虚拟环境和本地环境互不打扰 想用什么模块直接下载
虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境

pycharm创建

每创建一个虚拟环境就相当于重新下载了一个全新的解释器

创建好的虚拟环境:

命令行创建

python -m venv pyvebne38

注意:python命令此处不支持多版本共存操作 python27 python36 python38

用命令行创建的时候 要将要使用的python解释器放到最上面

创建好了以后 将虚拟环境激活
要先cd到创建好的目录中的scripts文件下
执行激活命令:
activate
关闭指令:
deactivate

视图层之必会三板斧

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

class HttpResponse:
pass
return HttpResponse()
'''返回的是HttpResponse加括号产生的对象'''

def render():
return HttpResponse()
return render()
'''返回的是HttpResponse加括号产生的对象'''

def redirect():
redirect_class = 类(祖先有个类是HttpResponse)
return redirect_class()
return redirect()
'''返回的是HttpResponse加括号产生的对象 '''

permanent=False 执行HttpResponseRedirect

HttpResponseRedirect继承了HttpResponseRedirectBase

HttpResponseRedirectBase继承了HttpResponse

JsonResponse对象

import json
def func(request):
user_dict = {'name':'jason'老师}
#user_json=json.dumps(user_dict)
#return HttpResponse(user_json)
return JsonResponse(user_dict)
ps:写代码的时候多参考源码及所学知识扩展功能

字符编码问题

return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})

视图层之request对象获取文件

form表单携带文件类型的数据需要做到以下几点
1.method='POST'
2.enctype必须是multipart/form-data
django后端需要通过request.LILES获取文件类型的数据

视图层之FBV与CBV

FBV

基于函数的视图

CBV

基于类的视图
class Myview(views.View):
def get(self,request):
return HttpResponse('get') def post(self,request):
return HttpResponse('post') 基于类的路由层
path('class/',views.Myview.as_view())
会根据请求方法的不同自动匹配对应的方法并执行

CBV源码剖析(*)

1.从CBV的路由匹配切入

path('class/',views.Myview.as_view())
1.类名点名字(名字查找问题 先从对象自身找 然后去产生对象的类 再去父类)
2.类名点名字病假括号调用(静态方法、绑定给类的方法)

2.函数名加括号执行优先级最高 项目已启动就会自动执行as_view方法

path('class/',views.Myview.as_view())
变成
path('class/',views.view)
'''CBV路由本质还是FBV'''

3.浏览器地址栏访问class路由需要执行的view函数

1.产生我们自己编写类的对象
2.对象调用dispatch方法(注意查找顺序 先看自己 再看产生对象的类 在看父类)

4.研究父类中的dispatch方法

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

模板层

1.模板语法的传值

传值方式1:
精准传值 不浪费资源 针对资源多的传递书写麻烦
{{'n1'=name,'n2'=age}} 传值方式2:
将函数名称空间中的所有名字全部传递 浪费资源
locals()将当前试图上的所有名字直接传给页面

2.模板语法传质特性

1.基本数据类型正常展示
2.文件对象也可以展示并调用方法
3.函数名会自动加括号执行并将返回值展示到页面上(不支持额外传参)
4.类名也会自动加括号调用
5.对象则不会 ps:总结针对可以加括号调用的名字模板语法都会自动加括号调用

3.模板语法之过滤器(内置函数)

{{i|add:1}}     			   i数值自增1
{{s|add:'dig'}} s字符串拼接
{{l|length}} l列表统计长度
{{s|slice:'1:4'}} 索引1切到4
{{ file_size|filesizeformat } 将文件大小转换成合适的格式
{{ ctime|date:'Y-m-d H:i:s ' }} 日期格式 x不能用
{{ s|truncatechars:5 }} 节选字符 后面的参数设置为挤 就会显示鸡哥字符 剩余部分用...表示
{{ s|truncatewords:3 }} 类似truncatechars,参数设置为几,就会显示单词,剩余部分用三个点表示 h1 = '<h1>哈哈哈哈</h1>'
s1 = "<script>confirm(123)</script>"
<p>{{ h1|safe }}</p>
<p>{{ s1|safe }}</p>
对变量内的字符串进行html转义(默认情况下是不转义)

路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request对象获取文件、视图层FBV与CBV的源码剖析、模版层简介的更多相关文章

  1. 12月13日内容总结——路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request对象获取文件、视图层FBV与CBV的源码剖析、模版层简介

    目录 一.路由分发 二.名称空间 方式1:名称空间 方式2:别名不冲突即可 三.虚拟环境 pycharm创建虚拟环境 命令行的方式创建虚拟环境: 创建虚拟环境的命令 激活与关闭虚拟环境 四.视图层之必 ...

  2. Django路由层之路由分发 名称空间 虚拟环境 视图层之三板斧 JsonRsponse对象 request对象获取文件 FBV与CBV CBV源码剖析 模板层

    目录 路由层之路由分发 路由层之名称空间 方式1:名称空间 方式2:别名不冲突即可 虚拟环境 pycharm创建虚拟环境 命令行形式创建虚拟环境 视图层之三板斧 HttpRsponse render ...

  3. Django框架路由分发-名称空间

    目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...

  4. Django url反向解析与路由分发名称空间

    url反向解析 url.py from django.conf.urls import url from django.contrib import admin from app01 import v ...

  5. caffe库源码剖析——net层

    net层的功能实现主要涉及到net.hpp和net.cpp文件,让我们要捋顺它是干了什么,是如何实现的. 1. net层使用到的参数 第一步要做的事,就是查看caffe.proto文件,弄清楚net都 ...

  6. STL源码剖析 — 空间配置器(allocator)

    前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中. 你完全可以实现一个直接向硬件存取空间的allocator. 下面介绍的是SGI STL提供的配 ...

  7. 路由分发、名称空间、视图层之必会的三板斧、JsonResponse对象、request获取文件、FBV与CBV、模板层语法传值

    路由分发.名称空间.视图层之必会的三板斧.JsonResponse对象.request获取文件.FBV与CBV.模板层语法传值 一.昨日内容回顾 二.路由分发 1.djiango的每个应用都有主见的t ...

  8. Django Rest Framework源码剖析(八)-----视图与路由

    一.简介 django rest framework 给我们带来了很多组件,除了认证.权限.序列化...其中一个重要组件就是视图,一般视图是和路由配合使用,这种方式给我们提供了更灵活的使用方法,对于使 ...

  9. Web API 源码剖析之默认消息处理程序链之路由分发器(HttpRoutingDispatcher)

    Web API 源码剖析之默认消息处理程序链-->路由分发器(HttpRoutingDispatcher) 我们在上一节讲述了默认的DefaultServer(是一个类型为HttpServer的 ...

随机推荐

  1. Vue学习之--------全局事件总线(2022/8/22)

    文章目录 1.全局事件总线基础知识(GlobalEventBus) 2.图解过程 3.代码实例 3.1 main.js 3.1 App.vue 3.2 School.vue 3.3 Student.v ...

  2. clip-path属性深入理解与使用

    clip-path CSS 属性可以创建一个只有元素的部分区域可以显示的剪切区域.区域内的部分显示,区域外的隐藏. clip-path的属性值可以是以下几种: 1.inset: 将元素剪裁为一个矩形, ...

  3. C#中winform DataGridView常用修改点

    1.修改列名 一般情况下,从数据库里面读取的列名是英文或者拼音,但是,有时候显示需要中文,这样就需要修改列名了. dgv.Columns[0].HeaderCell.Value="编号&qu ...

  4. PS2023下载安装保姆级教程中文汉化完整版

    PS2023Windows安装教程退出安全软件①:下载PS2023安装包 ②:打开下载好的文件,鼠标右键把安装包解压③:打开解压好的"PS 24.0.0"文件夹,找到并选中&quo ...

  5. SolidWorks2020下载安装中文版教程,你solidworks安装失败是什么原因?

    SW2020 WIN10 64位安装步骤: 1.先使用"百度网盘客户端"下载SW20S5_CN_x64安装包到电脑磁盘英文路径文件夹里,并鼠标右击进行解压缩,安装前先断开电脑网络, ...

  6. Go语言核心36讲06

    我已经为你打开了Go语言编程之门,并向你展示了"程序从初建到拆分,再到模块化"的基本演化路径. 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会 ...

  7. Promise基础知识

    Promise 1.Promise的前置小知识 进程(厂房) 程序的运行环境 线程(工人) 线程是实际进行运算的东西 同步 通常情况代码都是自上向下一行一行执行的 前边的代码不执行后边的代码也不会执行 ...

  8. 开发一个最简单的iOS App

    开发一个最简单的iOS App 大家好,我是孜孜不倦学习的Zhangbeihai. 上月底我组织了[组队学习]TensorFlow 入门课程(中文) ,截至目前有300多同学加入.主要就是 Tenso ...

  9. .NET周报【12月第1期 2022-12-08】

    国内文章 CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了? https://www.cnblogs.com/savorboard/p/cap-7-0.html) 今天,我们很高兴宣布 CAP ...

  10. 说说真实Java项目的开发流程,以及面试前的项目准备说辞

    介绍项目是必不可少的Java面试环节,求职者需要借此证明自己真实Java项目的经验,如果再做的好的话,需要借此展开自己的亮点说辞. 不过之前如果只有学习项目经验,比如是自己跑通一个项目,或者是在培训班 ...