社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django 系列篇(六):路由篇(下)

AirPython • 5 年前 • 498 次点击  

点击上方“AirPython”,选择“加为星标

第一时间关注Python技术干货!



系列导读


01. Django 系列篇(一):Hello World!

02. Django 系列篇(二):配置篇(上)

03. Django 系列篇(三):配置篇(下)

04. Django 系列篇(四):路由篇(上)

05. Django 系列篇(五):路由篇(中)

1. 前言

上两篇讲了路由的定义、变量、命名空间等,都是将路由看成一个网址,通过浏览器去访问。

实际上,在视图、模型、后台管理等功能模块,也会使用到路由。

2. 模板使用路由

Django 中,可以在模板 HTML 文件中使用 url 语法生成路由地址

首先,在 App 内定义一个路由,编写对应的视图函数,以之前的日期路由函数为例

# urls.py(App)
# App下的日期路由
urlpatterns = [
    # 指向日期视图函数
    path('//', views.ymd_with_params, name='ymd_with_params'),
]

# views.py(App)
# App编写视图函数
def ymd_with_params(request, year, month, day):
    """
    日期视图函数
    :param request:
    :return:
    """

    result = str(year) + '/' + str(month) + "/" + str(day)
    return HttpResponse(result)

然后,编辑 templates 文件夹下的 HTML 文件,使用 url 语法为 a 标签指定一个路由地址

# index.html(项目templates文件夹下)
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>第一个页面title>
head>

<body>
<h1>Hello World!h1>

<a href="{% url 'ymd_with_params' '2020' '04' '23' %}">跳转到日期路由页面a>
body>
html>

其中,url 语法包含 4 个参数,分别代表:路由的 name 值,路由和视图函数中定义的 3 个参数

模板语法 url 中使用的变量参数之间使用空格隔开,与路由地址定义的参数保证一一对应关系

需要注意的是,如果 App 有设置 namespace,模板语法 url 使用路由的时候,需要通过 namespace:路由名称的形式作为第一个参数

# App指定了namespace
urlpatterns = [
   path('', include(('first_app.urls''first_app'), namespace='first_app')),
]

# 模板中使用
"{% url 'first_app:ymd_with_params' '2020' '04' '23' %}">跳转到日期路由页面

最后,运行项目,点击 a 标签,即可以通过模板中定义的路由跳转到对应的页面

3. 视图反向解析路由

在视图里也可以使用路由,这一操作称为反向解析,通过路由命名或路由地址来获取路由信息。

反向解析主要使用 reverse()、resolve() 两个函数,其中

reverse() :通过路由命名和视图对象生成路由地址

resolve():通过路由地址获取路由对象信息

比如:定义了 namespace 为 temp_nam_space,路由 name 为 temp_name

那么,可以使用 reverse() 函数生成路由地址,然后通过 resolve() 函数将路由地址转换为路由对象

def ymd_with_params2(request, year, month, day):
    """
    日期视图函数
    :param request:
    :return:
    """

    # 参数
    args = ['2020''04''23']
    result = resolve(reversed('temp_nam_space:temp_name',args=args))

    # 查看路由信息
    print(result.kwargs)
    print(result.url_name)
    print(result.namespace)
    print(result.view_name)
    print(result.app_name)

    result = str(year) + '/' + str(month) + "/" + str(day)
    return HttpResponse(result)

同样,直接使用 reverse() 函数生成一个路由地址,放到响应中进行返回

def ymd_with_params3(request):
    """
    日期视图函数
    :param request:
    :return:
    """

    # 参数
    args = ['2020''04''23']

    # 使用reversed()函数生成路由地址
    return HttpResponse(reversed('temp_nam_space:temp_name', args=args))

4. 重定向

路由重定向,即:网页跳转到其他网页,对应的状态码为:301、302、303、307、308

Django 中重定向有 2 种方式,分别是:路由重定向、视图的重定向

路由重定向使用 RedirectView 类的 as_view() 方法类定义,默认支持 GET 请求

# urls.py(App)
# 路由重定向
# 参数url:设置网页跳转的路由地址,/ 代表首页
path('redirect_path', RedirectView.as_view(url='/'), name='redirect_path')

运行项目后,访问 redirect_path 路由,将会自动重定向到首页界面

对于视图重定向,相对使用更灵活,利用 Django 内置的 redirect() 函数能实现多方面的开发需求

# views.py(App)
def index_redirect(request):
    """
    首页重定向到日期页面
    :param request:
    :return:
    """

    # redirect() 函数,重定向到其他网页
    return redirect(reverse('ymd_with_params', args=[2020 423]))


留言送书


活动介绍走心留言,直接送书
今日赠书:《Excel报表一劳永逸(数据+函数+表格)》

今日留言主题

高效办公,除了 Excel,还有哪些工具?



推荐阅读


你真的会用 Postman 吗?

只需 10 行代码,Python 教你自制屏幕翻译工具,高效办公

为了追到小姐姐,我用 Python 制作了一个机器人




THANDKS
- End -
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62421
 
498 次点击