Django的路由系统
当一个请求来到时
当一个请求来到时 1、首先到项目目录下的urls.py(根URLconf模块)中,查找路由规则; 2、根URELcof模块,里面定义了 urlpatterns 变量; 3、urlpatterns是一个(django.urls.path, dango.urls.re_path 对象)列表; 4、按顺序运行没个url模式,在第一个匹配的模式停止; 5、一旦匹配,django导入并调用给定的视图; 6、如果中间出错,或者没有匹配到,返回404
path方法,及默认参数
默认参数需要配置的是路由(route),视图(view),kwargs和name是可选参数
1 - path(route, view, kwargs=None, name=None) 2 - route 是一个 字符串的url规则 3 - view 是个视图 4 - kwargs 额外参数,传递给view, 必须是一个字典 5 - name url的命名
正则表达式 re_path,可以配置需要的格式,如日期等
1 - re_path(route, view, kwargs=None, name=None) 2 3 python 中正则表达式的分组命名 : (?<name>pattern) 4 5 例: 6 re_path(r'students/(?P<year>\d{4})/(?P<mouth>[0-9]|1[0-2])', views.students)
在url中捕获参数,参数的传递在path中配置
1 - 在url中捕获参数 2 在url规则中使用<变量名>可以捕获url中的值 3 path('index/<变量名(key1)>/<变量名(key2)>', view.index) 4 变量名还可以使用-连接: <key>-<key> 5 6 views.py内的函数需要写上参数,需要一一对应 7 def detail(request, key1, key2) 8 9 传递给视图 10 ** 捕获的值是'字符串' 11 12 在浏览器输入的时候也是相对应的:127.0.0.1:8000/index/'key1'/'key2'/
路径转换器 - 路径转换器
例子 <int:pk> 常用的转换器: - str 匹配除了'/'路径分隔符之外的所有字符串 - int 匹配任意整数 - slug 匹配任意ASCII字符,加上连字符和下划线 - uuid 格式化id - path 匹配任意非空字符 例: path('index/<(int:key)>/', view.inedex)
django 搜索 url搜索的是什么?
只搜索路径部分,和参数,已经请求方法(get, post)无关
同一个url 可以匹配 get,post
包含其他URLconfs,在项目中添加(app 应用)下级urls的方法,include
1 include方法 2 from django.urls import include 3 4 path('teacher/', include('teacher.urls')) 5 6 同样也可以接受参数,但接受参数后,teacher下面的app都默认接受参数,会影响到views内的函数,也需要添加参数。所以需要谨慎使用。
传递额外参数
当kwargs中的key与url捕获中的key一致的时候,以kwargs为准
1 path,re_path 方法中,传递一个kwargs的字典参数 2 3 kwargs={key:value} 默认参数 4 5 *****当kwargs中的key与url捕获中的key一致的时候,以kwargs为准***** 6 如果是在项目主目录下的urls中include里添加,则是给项目下的某个app下面的所有urls添加额外默认参数 7 8 include同上代码 9 path('teacher/', include('teacher.urls'),kwargs={'key':'value'}
url命名,重定向
1 from django.shortcuts import render, redirect, reverse 2 views.py文件内操作 3 4 重定向 5 在函数内返回: return redirect('http://www.baidu.com') 6 跳转 7 return redirect('/teacher/index/') 硬编码 8 9 在urls文件内path内定义name参数 10 path('home/', views.index, name='index') 11 12 动态解析重定向 13 在views文件函数内需要添加一个变量 14 15 url = reverse('index') 关键操作只要reverse的内容正确,url内的path内的路径可以动态变动 16 return redirect(url)
1 app_name 2 模块内的命名,防止混淆,写在urls文件内 3 app_name = 'teacher' 4 在views文件内的函数内添加或者修改reverse 5 def login(request): 6 url = reverse('teacher:index') 7 8 重定向 9 redirect(url)
HTML模板导入
setting.py中设置模板的导入
1 在TEMPLATES中的 'DIRS':[os.path.join(BASE_DIR,'templates(html模板位置的文件夹名)']
渲染 views导入
1 2 第一种写法 3 4 from django.template.loader import get_template 5 6 #def index(request): 7 tp = get_template('teacher/index.html') #获取模板下的文件 8 html = tp.render() #渲染html页面 9 return HttpResponse(html) 返回html页面
1 第二种写法(快捷方式:推荐) 2 3 from django.shortcuts import render 4 5 #def index(request): 6 return render(request, 'teacher/index.html')
此处完,谢谢观看……