URL

Posted 韩乾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL相关的知识,希望对你有一定的参考价值。

 

 

Django处理请求的流程

  1. 进来的请求转入/hello/.
  2. Django通过在ROOT_URLCONF配置来决定根URLconf.
  3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
  4. 如果找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
 
 
 

URL匹配规则

  • 一旦匹配成功则不再继续
  • 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
  • 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  • 每个正则表达式前面的‘r‘ 是可选的但是建议加上。
 
如:url(r‘^hello/$‘, views.hello)
  • 如果尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/fo和/hello/bar
  • 如果忽略了尖号 "^",即’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。
  • 如果没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar。
  • 因此,我们使用这两个符号以确保只有/hello/匹配,不多也不少。

 

URL的常用的几种形式

 

# 位置参数,  正则带括号,视图必须带参数   year_archive(request, 2009)
url(r^eee/([0-9]{4})/$, views.year_archive), 

# 命名组 关键参数(GET)   year_archive(request, year=2009)
url(r^articles/(?P<year>[0-9]{4})/$, views.year_archive), 

# 命名组 关键参数 (POST)  page(request, num=12)
url(r^blog/page(?P<num>[0-9]+)/$, views.page), 

# 可选的第三个参数   page(request, num=12, foo=None)
url(r^blog/page(?P<num>[0-9]+)/$, views.page, {foo: bar},name=PAGE

 

字符串URL

from django.conf.urls import patterns, url, include

urlpatterns
= [ url(r^time/, mysite.views.time), ]

 

URL分组

from django.conf.urls import patterns, url, include

#login
urlpatterns = patterns(sblog.views,
    url(r^login/$,login),
    )

#logout
urlpatterns += patterns(sblog.views,
    url(r^logout/$,logout),
    )

 

别名

 

urlpatterns = [
url(r^$, news.views.index, name=index),
url(r^aaa/(?P<name>[^/]+)/$, news.views.aa,name=AA),
url(r^bbb/(?P<name>[^/]+)/$, news.views.bbb,name=BBB),
]
 

#在模板中使用
    不带参数: {% url "index" %}
    带参数: {% url "AA" www %} --- > /aaa/www


# 在views或者models中使用
>>> from django.core.urlresolvers import reverse # django 1.4-1.10
>>> from django.urls import reverse   # django 1.10新加的,更加规范
>>> reverse(BBB,args=(wwww,))
/bbb/wwww/
>>> reverse(AA,args=(wwww,))
/aaa/wwww/

 

 

名称空间

# mysite/urls.py
url(r^a/, include(blog.urls, namespace=author-polls,app_name=aaa)),

# blog/url.py
url(r^(?P<pk>\d+)/(?P<pw>\d+)$, views.post_detail, name=detail),


在模板中使用: 
{% url author-polls:detail pk=12 pp=99 %}
{% url aaa:detail pk=12 pp=99 %}


在views和models中使用
In [3]: reverse(author-polls:detail, kwargs={pk:1133,pw:555})
Out[3]: /a/1133/555
In [4]: reverse(aaa:detail, kwargs={pk:1133,pw:555})
Out[4]: /a/1133/555

以上是关于URL的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段3——url大全

根据图片的url地址下载图片到本地保存代码片段

结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url

如何从URL获取片段标识符(hash#之后的值)?

项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde(代码片段

HTTP客户端代码片段