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种写入以下代码

python 复制代码
from django.contrib import admin
from django.urls import path
from django.shortcuts import HttpResponse

def 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查询字符串

python 复制代码
#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))
python 复制代码
#urls.py
from app import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path ('book',views.book)
]

3.2path传参

python 复制代码
#views.py
#2.path方式 http://127.0.0.1:8000/book/1
def book_path(request,book_id):
    return HttpResponse('您查询的id:{}'.format(book_id))
python 复制代码
#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文件夹

python 复制代码
#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))
python 复制代码
#people应用下的 urls.py
from django.urls import path

from . 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')
]
python 复制代码
#Cangku应用下的 urls.py
from django.urls import path
from django.urls import include
urlpatterns = [
    path('admin/', admin.site.urls),
  

    path('people/',include("people.urls"))
]
相关推荐
赵英英俊2 小时前
Python day15
开发语言·python
zxsd_xyz3 小时前
基于LabVIEW与Python混合编程的变声器设计与实现
开发语言·python·labview
李昊哲小课4 小时前
K近邻算法的分类与回归应用场景
python·机器学习·分类·数据挖掘·回归·近邻算法·sklearn
@ chen4 小时前
Spring Boot 解决跨域问题
java·spring boot·后端
转转技术团队6 小时前
转转上门隐私号系统的演进
java·后端
笑小枫6 小时前
Pytorch使用GPU训练全过程,包含安装CUDA、cuDNN、PyTorch
人工智能·pytorch·python
Humbunklung6 小时前
Rust 模块系统:控制作用域与私有性
开发语言·后端·rust
mit6.8247 小时前
[AI-video] 数据模型与架构 | LLM集成
开发语言·人工智能·python·微服务
WanderInk7 小时前
依赖对齐不再“失联”:破解 feign/BaseBuilder 错误实战
java·后端·架构