学习python-Day52
2022/9/2 14:23:07
本文主要是介绍学习python-Day52,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今日学习内容
作业讲解
用户管理系统(单表)
- 配置文件
- settings中关于template的文件路径修改和添加。
- 将新建的应用注册
- 接口前缀
- 模型类
- 在models文件中创建各个类对应数据库
- 页面搭建
- 数据添加的逻辑
- 数据编辑的逻辑
- 数据删除的逻辑
django请求生命周期流程图
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项目下没有重复的别名。
这篇关于学习python-Day52的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门