03-路由控制1——简单示例+有名分组及一个高级用法

路由控制之简单配置————哪一个路由由哪一个视图函数去处理

全局的urls.py文件中

在“全局”的urls里额外引入一个re_path
from django.urls import path,re_path    
from app01 import views
        
urlpatterns = [
    path('admin/',admin.site.urls),
    path('login',views.login),
    
    #路由配置————哪一个路径由哪一个视图函数去处理(这里是新的内容)
    #调用的时候会自动传一个request参数,如special_case_2003(request)
    re_path(r'^articles/2003/$',views.special_case_2003), 
    
    #下面的效果跟上面一样,只不过是正则表达式的匹配方式不同,需要的函数还是写在app01的views.py文件中
    
    #注意这一个,有分组的话需要在views.py文件的相应的函数中多加一个参数:
    re_path(r'^articles/([0-9]{4})/$',views.year_archive)
    
    #有两个分组需要在views.py的相应的函数中多加两个参数:
    #注意views.py文件中形参的顺序有要求
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/$',views.month_archive)
    
    #对于需要多传两个及以上参数的情况,我们可以用“有名分组”:
    #在每一个分组的前面加 ?P<name> 这个name是这个分组的名字,注意不要重复
    #然后在views.py文件中对应的函数里,形参的名字与这里分组的名字对应上即可,而且形参的顺序没有要求了
    re_path(r'^artivles/(?P<str_2>[a-z]{2})/(?P<str_1>[a-z]{1})/$',views.str_name)  
]

app01应用(package)的views.py文件中

多引入一个HttpResponse————响应对象:返回响应体,响应首行与响应头由wsgiref模块解决了

from django.shortscuts import render,HttpResponse
        
#所有的请求信息都在这个request中!这个形参一定要写!
def special_case_2003(request):
    return HttpResponse('special_case_2003')    
    
def year_archive(request,year):
    return HttpResponse(year)
    
#注意这里形参的顺序有要求的
def month_archive(request,year,month):
    return HttpResponse('year:'+year+'month:'+month)    

#urls中利用“有名分组”的话,形参定义的顺序没有要求了,调用按照自己需要的顺序来就可以
def str_name1(request,str_1,str_2):
    return HttpResponse(str_2+' '+str_1)

url高级用法

re_path(r'^index/(?P<year>\d+)/(\d+)/', views.index,{'foo':'xxxxx'})  

这样写的话,后面的视图函数index必须有个参数的名字叫foo,而且它必须在位置参数的后面!foo的值是'xxxxx'

def index(request,foo):
    return HttpResponse(foo)
posted on 2019-05-17 19:57  江湖乄夜雨  阅读(178)  评论(0编辑  收藏  举报