Django框架的url路由规则系统(七)

2019-08-03  本文已影响0人  梦捷者

一、 urls.py的作用(项目目录下的urls.py为根配置)

1、 URL配置(URL conf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从根配置文件中开始。
2、注意事项:

二、url(路由规则)例子

1、在项目目录下urls.py文件中写路由规则


2、在项目目录创建了一个views.py文件
3、在地址栏中输入url来进行访问django服务器 注意:只有当你输入的url跟后台配置的url一致才会调用url对应的视图函数。当地址为:127.0.0.1:8000/test/python

三、 path方法的基本规则(重点):

1、示例:path('test/<xx>/',views.test)

2、基本格式:path(route,view,kwargs=None,name=None)

3、在url中捕获参数

4、类型转化器

四、path方法中支持的转换器

五、转换器的使用

1、设置url路由规则:
path('test/<int:xx>/',views.test3)#指定被捕获的参数为整数类型。
2、在视图中将获取到的参数和参数的类型打印出来:

def test3(request,xx):

    print(xx,type(xx))

    return HttpResponse('hello %s'%xx)

注意:注意:xx名称必须要一致。
3、完整示例:

path('detail/<pk>-<slug>/', views.detail) #可以用-来连接,但是参数必须位置相同。
def detail(request, pk, slug):   
        return HttpResponse('这是第%s个学生,%s太坏了'% (pk, slug))

六、re_path方法的正则匹配

1、urls.py文件中的代码

re_path('^hello/$',views.test5),

re_path('^hello/(?P<yy>[0-9]+)/',views.test6),

2、views.py文件中的代码

def test5(request):

    return HttpResponse('这是用的re_path设置的')

def test6(request,yy):

    print(yy,type(yy))

    return HttpResponse('hello %s'%yy)

3、注意注意:

七、项目目录下和app下的urls.py

1、一个url对应一个视图函数,但我们的视图越来越多时,url也就越来越多。

2、include的作用:一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,用include()函数在project的urls.py文件进行注册。

3、include使用的例子如下:

from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls')),] 
from django.urls import path

from . import views

urlpatterns = [ path('index/',views.index), ] 
from django.http import HttpResponse
def index(request):
return HttpResponse('这个book的首页!!')

八、kwargs参数的作用

1、kwargs传递一个Python 字典作为额外的参数传递给视图函数。

# 主urls.py文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls'),{'switch':'true'}),]

2、Kwargs为字典类型可以传递额外的参数到views中使用,include的时候需要统一给下面的url一些参数的时候可以用此参数。并且视图函数中可以通过关键字参数获取到。

# 为APP中books里面的views.py
from django.http import HttpResponse
import datetime
def index(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print(datetime.datetime.now())
    return HttpResponse('这个book的首页!!') 

3、注意事项

re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students, kwargs={'swich': True})
ef students(request, year, month, swich):

        return HttpResponse('这是%s年%s月%s'% (year,month, swich))
urlpatterns = [ path('admin/', admin.site.urls), path('teacher/', include('teacher.urls'),kwargs={'swich': True})]

这样就会给teacher子应用的每条路由规则传一个{'swich': True}参数,有的时候业务需求要。

上一篇 下一篇

猜你喜欢

热点阅读