django开发系列:url映射
url映射:
- 为什么会去urls.py文件中寻找映射呢?
是因为在settings.py
文件中配置了ROOT_URLCONF
为urls.py
。所有django会去urls.py
中寻找。 - 在
urls.py
中我们所有的映射,都应该放在urlpatterns
这个变量中。 - 所有的映射不是随便写的,而是使用
path
函数或者是re_path
函数进行包装的。
url传参数:
- 采用在url中使用变量的方式:在path的第一个参数中,使用
<参数名>
的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数。另外,url中可以传递多个参数。
urls.py文件代码:
def index(request):
return HttpResponse("首页")
urlpatterns = [
path('admin/', admin.site.urls),
path('',index),
path('book/',views.book),
path("book/detail/<book_id>/<category_id>/",views.book_detail)
]
对应app中views.py代码:
def book(request):
return HttpResponse("图书首页")
def book_detail(request,book_id,category_id):
# 可以从数据库中根据book_id提取这个图书的信息
text = "您获取的图书id是:%s,图书分类是%s" % (book_id,category_id)
return HttpResponse(text)
- 采用查询字符串的方式:在url中,不需要单独的匹配查询字符串的部分。只需要在视图函数中使用
request.GET.get('参数名称')
的方式来获取。
urls.py文件代码:
def index(request):
return HttpResponse("首页")
urlpatterns = [
path('admin/', admin.site.urls),
path('',index),
path('book/author/',views.author_detail),
]
对应app中views.py代码,http请求为:http://127.0.0.1:8000/book/author/?id=2/
.
def author_detail(request):
author_id = request.GET['id']
text = '作者的id是:%s' % author_id
return HttpResponse(text)
因为查询字符串使用的是GET
请求,所以我们通过request.GET
来获取参数。并且因为GET
是一个类似于字典的数据类型,所有获取值跟字典的方式都是一样的。
url参数的转换器,限定参数类型:
- str:除了斜杠
/
以外所有的字符都是可以的。 - int:只有是一个或者多个的阿拉伯数字。
- path:所有的字符都是满足的。
- uuid:只有满足
uuid.uuid4()
这个函数返回的字符串的格式。 - slug:英文中的横杆或者英文字符或者阿拉伯数字或者下划线才满足。
urls.py文件代码:
from django.contrib import admin
from django.urls import path
from book import views
from django.http import HttpResponse
from django.urls import converters
def index(request):
return HttpResponse("首页")
urlpatterns = [
path('admin/', admin.site.urls),
path('',index),
path('book/author/',views.author_detail),
path("book/publisher/<int:publisher_id>/",views.publisher_detail)
]
对应app中views.py代码:
def publisher_detail(request,publisher_id):
text = '出版社的id是:%s' % publisher_id
return HttpResponse(text)