ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学习python-Day52

2022-09-01 23:33:47  阅读:180  来源: 互联网

标签:匹配 python 视图 django 学习 path Day52 reg 路由


今日学习内容

作业讲解

用户管理系统(单表)

  1. 配置文件
    • settings中关于template的文件路径修改和添加。
    • 将新建的应用注册
    • 接口前缀
  2. 模型类
    • 在models文件中创建各个类对应数据库
  3. 页面搭建
  4. 数据添加的逻辑
  5. 数据编辑的逻辑
  6. 数据删除的逻辑

django请求生命周期流程图

image

1.浏览器想要某个服务需要发送一个请求以HTTP协议规定的格式发送给web服务网关接口。
2.wsgiref和uwsgi是实现WSGI协议的两个模块
3.中间件是外部进入django的第一层,维护django安全的插件
4.模型层是链接数据库,数据由路由层到视图层,使用模板语法向模板层索要数据后返回然后模板语法去渲染,然后模板语法通过模型层(类)索要数据库数据后面再由视图层返回到路由层,最后响应给浏览器。

路由匹配

path('网址后缀', 函数名):一旦网址后缀匹配上了就会自动执行后面的函数,并结束整个路由匹配。	

1.路由结尾的斜杠

默认我们在浏览器页面也不写斜杠,django会自动做第二次处理。
第一次匹配不上,会让浏览器加斜杠再次请求。
django配置文件中可以指定是否自动添加斜杠。
	APPEND_SLASH = False

2.path转换器

作用:当网址后缀不固定的时候,可以使用转换器来匹配。django2.0版本以上才有转换器。
	转换器支持的数据类型:
	'int':IntConverter();
    'path':PathConverter();
    'slug':SlugConverter();
    'str':StringConverter();
    'uuid':UUIDConverter();
path('func/<int:year>/<str:info>', views.finc)
 # func(request,year=int(后缀)) 视图函数需要传入一个默认值形参。
转换器匹配到的内容会当做视图函数的关键字参数传入。
转换器里有几个,则传入视图函数的形参就要一一对应。
	def func(request, year, info):
        pass

3.re_path正则匹配

re_path(正则表达式,函数名)
一旦网址后缀的正则能够匹配到内容就会自动执行后面的视图函数,并且结束整个路由的匹配。
	re_path('^test/$', views.test)
    '^'表示匹配头部、'$'表示匹配尾部
  • 正则匹配之无名分组

    re_path('^test/(\d+)/', views.test)
    '()' 表示分组
    正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数
    
  • 正则匹配之有名分组

    re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test)
    正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
    

4.django版本区别

在django1.11中,只支持正则匹配并且方法是url()
django2,3,4中 path() re_path() 等价于 url()

反向解析

对于页面上的路由,我们可能会改变,一旦改变会导致所有页面相关的链接失效。

为了防止这种问题发生,我们需要使用反向解析。

反向解析就是返回一个结果,该结果可以访问到对应的路由。

1.路由对应关系起别名

path('register/', views.reg, name='reg_view')

2.使用反向解析语法

html页面
	{% url 'reg_view' %}
后端
	from django.shortcuts import reverse
    reverse('reg_view')
反向解析的操作三个方法都一样 path() re_path() url()

3.无名有名方向解析

'''settings.py'''
	path('reg/<str:info>/', view.reg, name='reg_view')
当路由中有不确定的匹配因数,反向解析的时候需要人为给出一个具体的值。
'''views.py'''
	reverse('reg_view', args=('xz',))
'''xxx.html'''
	{% url 'reg_view' 'xz'%}

路由分发

django中应用都可以有自己独立的
	urls.py	template文件夹	static文件夹
能够让基于django开发的多个应用彼此独立,便于管理和小组开发。

总路由

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

通过总路由分发到各个应用的路由。总路由相当于做转接线,通过总路由找到各自子路由。

子路由

path('after/', views.after)
path('after', views.after)
对于项目特别大,应用多的时候可以用路由分发。

名称空间

对于路由分发下有多个应用在涉及到反向解析起别名时有冲突,无法正常解析有两种解决方法。

解决方案1:
	可以利用名称空间 namespace
    path('app01/', include(('app01.urls', 'app01'),namespace='app01'))
    path('app01/', include(('app01.urls', 'app02'),namespace='app02'))

解决方案2:
	别名不冲突
    保证django项目下没有重复的别名。

image

image

标签:匹配,python,视图,django,学习,path,Day52,reg,路由
来源: https://www.cnblogs.com/bjyxxc/p/16648174.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有