首页 > Web开发 > 详细

django基础 -- 3. urls.py 路由系统

时间:2019-02-22 18:23:33      阅读:200      评论:0      收藏:0      [点我收藏+]

一.基本格式 

from django.conf.urls import url
from . import views
#循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,
   就不再往下循环了,并给函数传一个参数request,和wsgiref的environ类似
    ,就是请求信息的所有内容 urlpatterns = [ url(正则表达式, views视图函数,参数,别名),

]
  参数说明 
1.正则表达式:一个正则表达式字符串
2.views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
3.参数:可选的要传递给视图函数的默认参数(字典形式)
4.别名:一个可选的name参数
注意事项
1.urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
2.若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
3.不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/),
  因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4.每个正则表达式前面的‘r‘ 是可选的但是建议加上。
5.^articles& 以什么结尾,以什么开头,严格限制路径

 

二.分组命名匹配

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r‘^articles/2003/$‘, views.special_case_2003), 
    #注意正则匹配出来的内容是字符串,即便是你在url里面写的是2003数字,匹配出来之后也是字符串    url(r‘^articles/(\d{4})/$‘, views.year_archive),#year_archive(request,2003),
      小括号为分组,有分组,那么这个分组得到的用户输入的内容,就会作为对应函数的位置参数传进去,
      别忘了形参要写两个了,明白了吗? url(r‘^articles/(?P
<year>[0-9]{4})/$‘, views.year_archive),
      #某年的,(?P<year>[0-9]{4})这是命名参数(正则命名匹配还记得吗?),
       那么函数year_archive(request,year),形参名称必须是year这个名字。
       而且注意如果你这个正则后面没有写$符号,即便是输入了月份路径,也会被它拦截下拉,因为它的正则也能匹配上 url(r‘^articles/(?P
<year>[0-9]{4})/(?P<month>[0-9]{2})/$‘, views.month_archive),
        #某年某月的 url(r‘^articles/(?P
<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$‘, views.article_detail),
        #某年某月某日的 ]

 

 

# urls.py中
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r‘^blog/$‘, views.page),
    url(r‘^blog/page(?P<num>[0-9]+)/$‘, views.page),
]

# views.py中,可以为num指定默认值
def page(request, num="1"):
    pass

 

 

 

三.分发 ( include)

  1.分发过程

①主文件中的 urls.py

技术分享图片

 

 

② app文件中的 urls.py

技术分享图片

 ③ settings.py文件中添加 app02

 技术分享图片

 

 四.参数 (可不写 ,类似于一个字典)

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r‘^blog/(?P<year>[0-9]{4})/$‘, views.year_archive, {‘foo‘: ‘bar‘}),#注意,这就像一个命名分组一样,你的函数里面的必须有一个形参,形参必须叫做foo才行。
]



#在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year=‘2005‘, foo=‘bar‘)。
 这个技术在Syndication 框架中使用,来传递元数据和选项给视图。

 

 

 五.别名 ( URL的反向解析)

  解决解决网址更换带来的不便

 

 举例:

在urls.py文件中

url(r‘^home‘, views.home, name=‘home‘), # 给我的url匹配模式起名(别名)为 home,别名不需要改,路径你就可以随便改了,
                            别的地方使用这个路径,就用别名来搞

在 .html 文件中(不管文职如何改变,在.html中都不需要改变)

<body>

<a href="{% url ‘abc‘ %}">asdf</a>

<a href="{% url ‘abc‘ %}">asdf</a>
<form action="{% url ‘abc‘ %}">

</form>
<a href="{% url ‘abc‘ %}">asdf</a>
</body>




 

 

 六.重定向( redirect 响应)

  示例

view文件中

from django.shortcuts import render,HttpResponse,redirect def index(request): return redirect(‘/base/‘) def base(request): dic = {‘name‘: ‘chao‘} return render(request,‘base.html‘,dic)

 

 

urls.py文件中

from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ # url(r‘^admin/‘, admin.site.urls), url(r‘^$‘, views.index), url(r‘^base/‘, views.base), ]

 

 

 

七.请求 与 响应 的常用方法

 

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

def index(request):
  #请求方式 print(request.method) #获取请求方式 print(request.GET) #获取get请求的所有数据 字典 print(request.POST) #获取post请求的所有数据 字典 # print(request.GET.get()) #字典取值 # print(request.POST.get()) #字典取值 print(request.path) # /index/ #路径 print(request.get_full_path()) # /index/?a=1
&b=2 路径带参数 # print(request.META) # 请求头所有信息的一个大字典 print(request.META[‘HTTP_USER_AGENT‘]) # Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36   #响应方式 #① HttpResponse(字符串)
    # return HttpResponse(‘ok‘)
   # ②render 返回页面
# ③redirect 重定向
   return redirect(‘/base/‘)
 

 

 

 八.静态文件配置方式

  1

技术分享图片

 

  2

 技术分享图片

 

  

 

django基础 -- 3. urls.py 路由系统

原文:https://www.cnblogs.com/sc-1067178406/p/10419596.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!