首页 > 其他分享 >12月13日内容总结——

12月13日内容总结——

时间:2022-12-13 16:57:35浏览次数:64  
标签:总结 13 12 return request app01 app02 reg 路由

目录

一、路由分发

  • django支持每个应用都可以有自己独立的路由层、静态文件、模板层。基于该特性多人开发项目就可以完全解耦合,之后利用路由分发还可以整合到一起

  • 多个应用都有很多路由与视图函数的对应关系 这个时候可以拆分到各自的路由层中

  • 说的直白一点,路由分发就是把Django项目中的路由信息分配到每个应用中,然后在项目的路由文件中导入应用中的路文件即可正常使用。

使用路由分发之前 总路由直接干路由与视图函数的匹配

path('index/', index)

使用路由分发之后 总路由只按照应用名分配匹配方向

path('app01/',include('app01.urls')),
path('app02/',include('app02.urls')),

应用中的子路由:

path('after/',views.after)  # app01

path('after/',views.after)  # app02

总结:

  • 路由分发解决的就是项目的总路由匹配关系过多的情况
  • 利用路由分发之后 总路由不再处理路由与视图函数的直接对应关系
  • 总路由而是做一个分发处理(识别当前url是属于那个应用下的 直接分发对应的应用去处理)

二、名称空间

路由分发之后,针对相同的别名能否自动反向解析出不同的应用前缀?

经过测试,默认情况下是无法直接识别应用前缀的。

如果想要正常识别区分有两种方式

方式1:名称空间

在总路由中增加一个名称空间(在Django1和Django2及以上版本有区别,Django1用的是url)

Django2及以上版本

path('app01/', include(('app01.urls', 'app01'), namespace='app01')),

path('app02/', include(('app02.urls', 'app02'), namespace='app02')),

反向解析中的使用方式

reverse('app01:index_view')
reverse('app02:index_view')

Django1中的使用方式

# 1.总路由增加一个名称空间
url(r'^app01/',include('app01.urls',namespace='app01')), # 创建名称空间app01
url(r'^app02/',include('app02.urls',namespace='app02'))  # 创建名称空间app02
# 2.子路由app01
urlpatterns = [
    url(r'^reg/',views.reg,name='reg')
]
# 后端
def reg(request):
    print(reverse('app01:reg'))
    return HttpResponse('app01: reg')

# 前端
{% url 'app01:reg' %}

# 3.子路由app02
urlpatterns = [
    url(r'^reg/',views.reg,name='reg')
]

# 后端
def reg(request):
    print(reverse('app02:reg'))
    return HttpResponse('app02: reg')
# 前端
{% url 'app02:reg' %}

方式2:别名不冲突即可

多个应用别名不冲突可以用应用名作为别名的前缀

path('index/', views.index, name='app01_index_view')

path('index/', views.index, name='app02_index_view')

三、虚拟环境

通过具体情况导入概念

项目1需要使用:

django1.11

python38

项目2需要使用:

django2.22 pymysql requests

python38

项目3需要使用:

django3.22 request_html flask urllib3

python38

实际开发项目中我们会使用虚拟环境进行解释器的配置,让每个项目所使用的虚拟环境只配备所需的环境,不需要的一概不配!!!

虚拟环境:能够针对相同版本的解释器创建多个分身,每个分身可以有自己独立的环境。

pycharm创建虚拟环境和cmd中使用代码创建虚拟环境

pycharm创建虚拟环境:

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

步骤一:打开pycharm后新建一个项目

image

步骤二:按图示进行操作

image

命令行的方式创建虚拟环境:

python -m venv pyvenv38
 
注意:python命令此处不支持多版本共存的操作 python27 python36 python38
    激活
        activate
    关闭
        deactivate

pip install --index-url http://mirrors.aliyun.com/pypi/simple/ django==1.11.11 --trusted-host mirrors.aliyun.com

四、视图层之必会三板斧

用来处理请求的视图函数都必须返回HttpResponse对象		完全正确
class HttpResponse:
    pass
return HttpResponse()	

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

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

五、JsonResponse对象

from django.http import JsonResponse
def index_func(request):
    # return HttpResponse('哈哈哈')
    # return render()
    # return redirect()
    # 返回给浏览器一个json格式的字符串
    user_dict = {'name': 'jason老师', 'age': 18}
    # import json
    # user_json = json.dumps(user_dict, ensure_ascii=False)
    # return HttpResponse(user_json)
    return JsonResponse(user_dict)

ps:以后写代码很多时候可能需要参考源码及所学知识扩展功能
	class JsonResponse():
        def __init__(self,data,json_dumps_params=None):
        		json.dumps(data,**json_dumps_params)
          
JsonResponse主要序列化字典 针对非字典的其他可以被序列化的数据需要修改safe参数为False

六、视图层之request对象获取文件

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

七、视图层之FBV与CBV

FBV
	基于函数的视图
	def index(request):return HttpResponse对象

CBV
	基于类的视图
	from django import views
  	 class MyLoginView(views.View):
        def get(self, request):
            return HttpResponse('from CBV get function')

        def post(self, request):
            return HttpResponse('from CBV post function')
	path('login/', views.MyLoginView.as_view())
	会自动根据请求方法的不同自动匹配对应的方法并执行

八、CBV源码剖析(重要)

1.从CBV的路由匹配切入
	path('login/', views.MyLoginView.as_view())
        1.类名点名字(名字的查找问题)
        2.类名点名字并加括号调用(静态方法、绑定给类的方法)
2.函数名加括号执行优先级最高 项目一启动就会自动执行as_view方法
	path('login/', views.view)  # CBV路由本质还是FBV
3.浏览器地址栏访问login路由需要执行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)

九、模板层

"""
{{}}:主要与数据值相关
{%%}:主要与逻辑相关

django的模板语法是自己写的 跟jinja2不一样

1.针对需要加括号调用的名字 django模板语法会自动加括号调用你只需要写名字就行
2.模板语法的注释前端浏览器是无法查看的 {##}
3.
"""

1.模板语法传值
    return render(request, 'demo02.html', {'n1': name, 'a1': age})  # 传值方式1:精准传值 不浪费资源 针对多资源的传递书写麻烦
    return render(request,'demo02.html', locals())  # 传值方式2:将函数名称空间中所有的名字全部传递 名字过多并且不使用的情况下比较浪费资源

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

十、作业

全面熟悉各部分代码

预习明日内容(模板层、模型层)


标签:总结,13,12,return,request,app01,app02,reg,路由
From: https://www.cnblogs.com/zhihuanzzh/p/16979250.html

相关文章

  • 常见排序算法总结
    上次面试时被问到了排序算法,还有复杂度,稳定性。很多都忘了,写一篇总结备忘。总共10种排序算法,1、冒泡排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序7......
  • pytest + yaml 框架 -13.多环境配置切换
    前言前言当我们在测试环境写好自动化的代码,领导说你把代码部署到联调环境再测一测,这时候去改用例里面的配置是很痛苦的。所以我们在设计自动化用例的时候,就先要想到多环......
  • 数据库总结
    数据库总结:(0)基本概念:1)属性:基本属性:不可以继续划分的属性;复合属性:可以继续划分的属性;单值属性:多值属性:2)主键:3)外键:另外一个表的主键作......
  • awk学习一之资料总结
    目录​​官网​​​​awkhelp​​​​manawk​​​​awk系列文章​​​​awk优秀文章​​官网官方手册​​​https://www.gnu.org/software/gawk/manual/​​awkhelpm......
  • redis缓存穿透、缓存雪崩、缓存击穿【项目总结】
    Redis项目总结--缓存穿透、缓存雪崩、缓存击穿目录Redis项目总结--缓存穿透、缓存雪崩、缓存击穿一.缓存穿透1.什么是缓存穿透2.缓存穿透解决方案3.流程二.缓存雪崩1.什么......
  • 齐鲁云采政府采购网上商城 - 关于调整2022年度12月份批量集采需求归集期限的通知
    根据年底财政部门预算结转工作安排,12月中旬将暂停预算管理一体化系统中政府采购模块的“计划录入(不含预采购)和合同录入”功能。为确保各级采购人按时完成年度预算执行工作,......
  • ORA-12638:身份证明检索失败
    说明:通过PLSQL连接远程服务器,提示12638身份证明检索失败错误,登录服务器验证数据库一切正常,连接本地的数据库也正常。这是由于Oracle的认证方式导致的,使用了本地操作系统认......
  • 力扣每日一题2022.12.12---1832. 判断句子是否为全字母句
    全字母句指包含英语字母表中每个字母至少一次的句子。给你一个仅由小写英文字母组成的字符串sentence,请你判断 sentence是否为全字母句。如果是,返回true;否则,返回......
  • struts2 CVE-2013-4316 S2-019 Dynamic method executions Vul
    struts2CVE-2013-4316S2-019DynamicmethodexecutionsVulcatalog1.Description2.EffectedScope3.ExploitAnalysis4.PrincipleOfVulner......
  • struts2 CVE-2013-1965 S2-012 Showcase app vulnerability allows remote command ex
    struts2CVE-2013-1965S2-012Showcaseappvulnerabilityallowsremotecommandexecutioncatalog1.Description2.EffectedScope3.ExploitA......