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"))
]
相关推荐
小邓睡不饱耶7 小时前
实战|W餐饮平台智能化菜品推荐方案(含Spark实操+算法选型+完整流程)
python·ai·ai编程·ai写作
草莓熊Lotso7 小时前
Qt 主窗口核心组件实战:菜单栏、工具栏、状态栏、浮动窗口全攻略
运维·开发语言·人工智能·python·qt·ui
aiguangyuan7 小时前
基于BiLSTM-CRF的命名实体识别模型:原理剖析与实现详解
人工智能·python·nlp
禹凕7 小时前
Python编程——进阶知识(MYSQL引导入门)
开发语言·python·mysql
Victor3567 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack7 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo7 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
阿钱真强道7 小时前
13 JetLinks MQTT:网关设备与网关子设备 - 温控设备场景
python·网络协议·harmonyos
Victor3567 小时前
MongoDB(3)什么是文档(Document)?
后端
我的xiaodoujiao7 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 47--设置Selenium以无头模式运行代码
python·学习·selenium·测试工具·pytest