Django中的url与视图详解(1)

Django中的url与视图详解(1)

这是Django的第一部分:关于url跟视图的相关知识,下面请看操作:

url映射:

  1. 映射是Django的原生功能,因为在settings.py中配置了ROOT_URLCONFurls.py。所有django会去urls.py中寻找。
  2. 我们所有的映射都要放在urlpatterns这个变量中,不要问为什么,因为我也不知道。映射的前提是需要使用pathre_path函数,区别是,后者比前者多了一个功能:使用正则法则,后面会详细说这一点。

url传参数:

​ 采用在url中使用变量的方式:在path的第一个参数中,使用<参数名>的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数。另外,url中可以传递多个参数。


上面说的可能比较抽象,详细解说一下:这里是一个对应的过程。。。。

Django中的url与视图详解(1)_第1张图片
Django中的url与视图详解(1)_第2张图片
这种一一对应的,第一个函数是在views.py(视图函数中)、第二个是在url.py中,结合上面文字加深理解。


上面是使用变量的方式进行传参的,下面我们使用一个高大上的,查询字符串的方式。我们只需要在视图函数中使用request.GET.get('参数名称')的方式来获取。示例代码如下:

def author_deatil(request):
    author_id = request.GET.get('id')
    text = "作者的id是:%s" %author_id
    return HttpResponse(text)

url参数的转换器:

暂时带过,后面会具体讲解

  1. str:除了斜杠/以外所有的字符都是可以的。
  2. int:只有是一个或者多个的阿拉伯数字。
  3. path:所有的字符都是满足的。
  4. uuid:只有满足uuid.uuid4()这个函数返回的字符串的格式。
  5. slug:英文中的横杆或者英文字符或者阿拉伯数字或者下划线才满足。

urls模块化:

想一个实际问题,随着我们的项目越来越大,填写的内容越来越多,把所有的url全部放在主urls.py中是不是不利于管理,所以后面我们需要在自己创建的APP中存放自己的urls进行管理==》基本操作,在APP中新建一个urls.py进行存储该应用的子url。

管理子url后,就涉及到新的概念include函数,我们日常都是用该函数进行管理。

#主程序中的urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book',include('book.urls'))
]
  1. appurls.py中,所有的url匹配也要放在urlpatterns的变量中,否则找不到。
  2. url是会根据主urls.py和app中的urls.py进行拼接的,因此注意不要多加斜杠。

引申出include函数及其用法:

include(module,namespace=None):

  • module:子url的模块字符串。
  • namespace:实例命名空间。这个地方需要注意一点。如果指定实例命名空间,那么前提必须要先指定应用命名空间。也就是在子urls.py中添加app_name变量。

include((pattern_list, app_namespace), namespace=None):include函数的第一个参数既可以为一个字符串,也可以为一个元组。

如果是元组,那么元组的第一个参数是子urls.py模块的字符串,元组的第二个参数是应用命名空间。也就是说,应用命名空间既可以在子urls.py中通过app_name指定,也可以在include函数中指定:

#app_name = font ==》这是应用命名
#namespace=list_id ==》是实例命名空间
path('font/',include(
	path('',views.font,namespace) #url:font/
	path('list_id/',views.font_list,namespace = list_id) #url:font/list_id
))

未完待续。。。。。

鸡汤:学习不是三分钟的热血,而是一辈子所为之努力的,加油吧,骚年!

你可能感兴趣的:(Django学习)