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')

 


 

此处完,谢谢观看……

 

posted on 2019-02-19 16:12  華華  阅读(196)  评论(0编辑  收藏  举报