Django中的url与视图详解(1)
这是Django的第一部分:关于url跟视图的相关知识,下面请看操作:
url映射:
- 映射是Django的原生功能,因为在settings.py中配置了
ROOT_URLCONF
为urls.py
。所有django会去urls.py
中寻找。 - 我们所有的映射都要放在
urlpatterns
这个变量中,不要问为什么,因为我也不知道。映射的前提是需要使用path
与re_path
函数,区别是,后者比前者多了一个功能:使用正则法则,后面会详细说这一点。
url传参数:
采用在url中使用变量的方式:在path的第一个参数中,使用<参数名>
的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数。另外,url中可以传递多个参数。
上面说的可能比较抽象,详细解说一下:这里是一个对应的过程。。。。
这种一一对应的,第一个函数是在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参数的转换器:
暂时带过,后面会具体讲解
- str:除了斜杠
/
以外所有的字符都是可以的。 - int:只有是一个或者多个的阿拉伯数字。
- path:所有的字符都是满足的。
- uuid:只有满足
uuid.uuid4()
这个函数返回的字符串的格式。 - 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'))
]
- 在
app
的urls.py
中,所有的url匹配也要放在urlpatterns
的变量中,否则找不到。 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
))
未完待续。。。。。
鸡汤:学习不是三分钟的热血,而是一辈子所为之努力的,加油吧,骚年!