Django基础(二)———URL与映射
前言
上篇文章给大家简单介绍Django框架的创建以及使用。
这篇文章将介绍Django框架当中最为重要的基础之一 URL与映射
一、URL与映射是什么?
在 Django 框架中,URL 与映射(URLconf)是核心机制之一,负责将用户请求的 URL 路径映射到对应的视图函数/类
二、核心概念
1.URLconf (URL configuration):
一个 Python 模块(通常是 urls.py
),定义 URL 模式与视图的映射关系。
2.URL 模式:
通过 path()
或 re_path()
定义的规则,匹配 URL 路径并触发视图。
三、使用
1.使用流程
#https://www.baidu.com/s?wd=python
#URL与视图的映射
#并/S(URL)->视图函数,进行映射
#http://127.0.0.1:8000->返回“欢迎来到Django”
2.编写代码
在urls.py种写入以下代码
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponsedef index(request):return HttpResponse("欢迎使用Django")
urlpatterns = [path('admin/', admin.site.urls),path('s',index)
]
这里只是给大家做一个演示,实际开发过程当中函数视图实不会卸载url.py文件当中,会写在view.py当中。
3.url两种传参方式
# 在URL中携带参数
#1.通过查询字符串(query string):https://www.baidu.com/s?wd=python&a=1&b=2
#2.在path中携带:http://127.0.0.1:8000/book/2
3.1查询字符串
#views.py
from django.shortcuts import HttpResponse
#1.查询字符串的方式:http://127.0.0.1:8000/book?id=3
def book(requset):book_id =requset.GET.get('id')return HttpResponse('您查询的id:{}'.format(book_id))
#urls.py
from app import views
urlpatterns = [path('admin/', admin.site.urls),path ('book',views.book)
]
3.2path传参
#views.py
#2.path方式 http://127.0.0.1:8000/book/1
def book_path(request,book_id):return HttpResponse('您查询的id:{}'.format(book_id))
#urls.py
#urls.pyfrom app import views
urlpatterns = [path('admin/', admin.site.urls),path('book/<book_id>',views.book_path)
]
#1.以后在浏览器中,如果book_id输入的是一个非整形,那么会出现404错误:/book/abc
#2.在视图函数中,得到的book_id就是一个整形,否则,默认是str类型
path('book/int:<book_id>', views.book_path)
4.path函数详解
path函数的定义为:path(route,view,name=None,kwargs=None)。以下对这几个参数进行讲解。
1.route参数:ur1的匹配规则。这个参数中可以指定ur1中需要传递的参数,比如在访问文章详情页的时候,可以传递一个id。传递参数是通过>>尖括号来进行指定的。并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的id都是int类型,那么可以这样写int:id以后匹配的时候,就只会匹配到id为int类型的ur1,而不会匹配其他的ur1,并且在视图函数中获取这个参数的时候,就已经被转换成一个int类型了。其中还有几种常用的类型:
-
str:非空的字符串类型。默认的转换器。但是不能包含斜杠。
-
int:匹配任意的零或者正数的整形。到视图函数中就是一个int类型
-
slug:由英文中的横杠-,或者下划线_连接英文字符或者数字而成的字符串。11-222-1234_abdf
-
uuid:匹配uuid字符串。
-
path:匹配非空的英文字符串,可以包含斜杠/。(某个文件夹下面的文件)
2.view参数:可以为一个视图函数或者是类视图.as_view()或者是django.ur1s.include()函数的返回值。
3.name参数:这个参数是给这个ur1取个名字的,这在项目比较大,ur1比较多的时候用处很大。
5.url模块化
在我们的项目中,不可能只有一个app,如果把所有的app的views中的视图都放在ur1s.py中进行映射,肯定会让代码显得非常乱。因此django给我们提供了一个方法,可以在app内部包含自己的ur1匹配规则,而在项目的ur1s.py中再统一包含这个app的ur1s。使用这个技术需要借助include函数。示例代码如下:
在people应用下创建urls.py文件夹
#people应用下 views.py
from django.shortcuts import HttpResponse
def people_list(requset):return HttpResponse('电影列表')def people_id(request,people_id):return HttpResponse('您传入的ID是{}'.format(people_id))
#people应用下的 urls.py
from django.urls import pathfrom . import views#指定命名空间
app_name = 'people'
urlpatterns = [path('people_list',views.people_list,name='people_list'),path('people_id/<int:people_id>',views.people_id,name='people_id')
]
#Cangku应用下的 urls.py
from django.urls import path
from django.urls import include
urlpatterns = [path('admin/', admin.site.urls),path('people/',include("people.urls"))
]