zoukankan      html  css  js  c++  java
  • 路由系统

    URLconf配置

    from django.conf.urls import url
    
    urlpatterns = [
         url(正则表达式, views视图,参数,别名),
    ]

    正则表达式: 正则字符串,匹配路径

    views视图: 视图中的函数

    参数: 可选,要传递给视图函数的默认参数,字典形式

    别名: 可选, name参数

     正则表达式

    r'' 开头

    最开始的/不用加

    从上到下匹配,匹配成功就不再继续

    APPEND_SLASH

    Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

    访问 http://www.example.com/blog 时,默认将网址自动转换为 http://www.example/com/blog/

    如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://www.example.com/blog 时就会提示找不到页面。

    分组和命名分组

    通过括号对正则表达式进行分组匹配,捕获URL中的值并且以位置参数的形式传给视图,在视图函数里定义相应个数的形参就可以

    例: url(r'^blog/([0-9]{4})/([0-9]{2})/', views.blog,name='blog')

    命名分组匹配的正则表达式来捕获URL中的值并且以关键字参数的形式传给视图,视图函数中必须使用和name相同的形参

    例: url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.blog,name='blog')

    URLconf 在请求的URL上查找,捕获的永远都是字符串,不包括GET和POST参数以及域名,所有的请求方法都将路由到相同的函数

    视图函数指定默认值

    # urls
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^blog/$', views.page),
        url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
    ]
    
    # views函数中,可以为num指定默认值
    def page(request, num="1"):
        pass

    include  路由分发

    在urls文件中,可以包含其他的URLconfs文件(有多个app文件,可以看做一级目录,二级目录)

    from django.conf.urls import include, url
    
    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^blog/', include('app02')),  # 可以包含其他的URLconfs文件
    ]

    命名URL和URL反向解析

    给URL匹配规则定义别名,通过名字来调用当前的URL

    静态地址

    命名

    url(r'^home', views.home, name='home'),   # 给url匹配模式起名为home

    使用

    # 在模板中使用
    
    {% url  'home'   %}      # 返回一个完成的url
    
    
    # 在py文件中使用(views文件)
    
    from django.urls import  reverse
    
    reverse('home')

    分组

    命名

    url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog,name='blog' )

    使用

    # 在模板中使用
    
    {% url  'blog'  '2019'  '04'  %}      位置参数传参    -----/blog/2019/04
    # 在py文件中使用(views文件) from django.urls import reverse reverse('blog',args=('2019','04')) -----/blog/2019/04

    命名分组

    命名

    url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog,name='blog' )

    使用

    # 在模板中使用
    
    {% url  'blog'  '2019'  '04'  %}      可以按照和分组一样的形式进行传参   
    
    {% url  'blog'  year='2019'  month='04'  %}      按照关键字参数的形式进行传参
    
    
    # 在py文件中使用(views文件)
    
    from django.urls import  reverse
    
    reverse('blog',args=('2019','04'))        按照位置参数的形式进行传参
    
    reverse('blog',kwargs={year:'2019',month:'04'})     按照关键字参数的形式进行传参

    namespace   命名空间

    在不同的app文件中,可能会出现url名称重复的现象,可以使用namespace,翻转URL时通过命名空间的名称得到当前的URL

    例: 在app01和app02的url文件中,都有detail名称

    from django.conf.urls import url, include
     
    urlpatterns = [
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]

    使用

    # 在模板中使用
    
    {% url 'app01:detail' pk=12 pp=99 %}
    
    
    # 在py文件中使用
    
    reverse('app01:detail', kwargs={'pk':11})
  • 相关阅读:
    一次性能测试的面试问题
    一次APP测试的感悟
    《程序员跳槽全攻略》读书笔记
    如果有人让你推荐编程技术书,请叫他看这个列表
    上班的一天
    马士兵Java视频教程 —— 学习顺序
    月薪3万的技术网站资源收集
    给32岁的自己一些答案
    《Vuser虚拟用户开发》读书笔记
    shell脚本异常:/bin/sh^M:bad interpreter: No such file or directory
  • 原文地址:https://www.cnblogs.com/sandy-123/p/10683707.html
Copyright © 2011-2022 走看看