编程语言
首页 > 编程语言> > python学习Day58

python学习Day58

作者:互联网

Day 58

今日内容概要

今日内容详细

昨日作业讲解

用户管理系统(单表)
1.配置文件
2.模型类
3.页面搭建
4.数据添加的逻辑
5.数据编辑的逻辑
6.数据删除的逻辑

需用文字写出来

一.django请求生命周期流程图

学习思路
     路由层
     视图层
     模板层
     模型层
     django插件
     django中间件
    ...

image

二.路由层系统

1.路由匹配
path('网址后缀',函数名)
	一旦网址后缀匹配上了,就会自动执行后面的函数。并结束整个路由的匹配
 
1.路由结尾的斜杠
	默认情况下不写斜杠 django会做二次处理 
    	第一次匹配不上 会让浏览器加斜杠再次请求
 	django配置文件中可以指定是否自动添加斜杠(默认是True 建议不要取消)
    	APPEND_SLASH = False
2.path转换器(只在django2以上才有 以下版本没有,但是可以用正则匹配)
	当网址后缀不固定的时候 可以使用转换器来匹配(常用的就int str)
    	'int': IntConverter(),
        'path': PathConverter(),
        'slug': SlugConverter(),
        'str': StringConverter(),
        'uuid': UUIDConverter(),
   path('func/<int:year>/<str:info>/', views.func)	
   转换器匹配到的内容会当做视图函数的关键字参数传入
  	转换器有几个叫什么名字 那么视图函数的形参必须对应
  	def func(request,year,info):
  		pass
2.re_path正则匹配 #(记得要先导入re_path)
    re_path(正则表达式,函数名)
    一旦网址后缀的'正则表达式'能够匹配到内容就会自动执行后面的函数。并结束整个路由的匹配
 eg:re_path('^test/$', views.test)
    当网址后缀不固定的时候 可以使用转换器来匹配
3.正则匹配之无名分组
    re_path('^test/(\d+)/', views.test)
   正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数
4.正则匹配之有名分组
   re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test)
   正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
5.django版本区别
     在django1.11中 只支持正则匹配 并且方法是 url()
     django2,3,4中  只有path() ,re_path()等价于url()
2.反向解析
页面上提前写死了很多路由 一旦路由被更改会导致所有页面相关链接失效
为了防止出现该问题 我们需要使用反向解析
"""
反向解析:返回一个结果 该结果可以访问到对应的路由
"""
1.路由对应关系起别名
	path('register/', views.reg, name='reg_view')
2.使用反向解析语法
	html页面
    	{% url 'reg_view' %}
  	后端
    	from django.shortcuts import reverse
        reverse('reg_view')
ps:反向解析的操作三个方法都一样path() re_path() url()
3.无名有名反向解析
path('reg/<str:info>/', views.reg, name='reg_view')
当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值
后端:reverse('reg_view', args=('jason',))
前端:{% url 'reg_view' 'jason' %}

ps:反向解析的操作三个方法都一样path() re_path() url()
4.路由分发
django中的应用都可以有自己独立的 urls.py、templates文件夹、static文件夹
'目的是'能够让基于django开发的多个应用完全独立 便于小组开发

方法是:
1.ctrl+alt+r 创建新应用 :startapp app02
2.在配置文件setting.py中INSTALLED_APPS里把刚刚的app02添加进去
3.在各应用(包括app01)下手动创建一个urls.py
写入:
from django.urls import path,re_path
urlpatterns=[
    
]
————————————————————————————————————————————————
总路由
    path('app01/', include('app01.urls')),
    path('app02/', include('app02.urls')),
子路由
    path('after/', views.after)  # app01
    path('after/', views.after)  # app02
"""
当项目特别大 应用特别多的时候 可以使用路由分发 非常方便!!!
"""
5.名称空间
有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析
解决方式1
    名称空间 namespace
           path('app01/', include(('app01.urls', 'app01'), namespace='app01'))
           path('app01/', include(('app01.urls', 'app02'), namespace='app02'))
解决方式2
    别名不冲突即可:在起名字的时候前面加一个固定前缀,比如应用名('app01_after_view')!
"""
保证django项目下没有重复的别名即可
"""

作业

整理今日内容及博客
使用分组、反向解析、路由分发完成用户数据增删改查
图书管理系统(多表)
	下周大作业(orm多表查询)

标签:学习,匹配,python,django,Day58,re,app01,path,路由
来源: https://www.cnblogs.com/Oreoxx/p/16648276.html