Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第三章: django视图 > 3.1节: url与视图的路由

3.1节: url与视图的路由

薯条老师 2020-07-16 15:49:32 235152 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

3.1.1 项目的目录结构

 在第一章的内容中,我们在D盘django-project目录中创建了django项目chipscoco,以及django应用blog,在学习新的知识前,先复习下项目的目录结构:

├──manage.py

└── chipscoco

    ├── __init__.py

    ├── settings.py

    ├── urls.py

    ├── wsgi.py

├── blog

    │   ├── __init__.py

    │   ├── admin.py

    │   ├── apps.py

    │   ├── models.py

    │   ├── tests.py

    │   ├── views.py

    │   ├── migrations

 在第二章的内容中,读者对django的MTV架构也有了整体的认识, MTV中的视图是整个架构的核心,它负责处理客户端的请求,并在必要时调用模型和模板。将客户端的请求与具体的视图进行关联,需要在django项目下的urls.py中进行路由配置。

3.1.2 在urls.py中配置路由

这里的路由,是指将客户端对http  url的访问请求,与具体的视图进行关联。对http url不是很熟悉的读者,可以复习下1.5.1小节 http url中的知。打开chipscoco目录下的urls.py, 代码如下:

"""chipscoco URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

from django.contrib import admin
from django.urls import path
import blog.views as blog

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.Home.as_view())
]

在urls.py的源代码中,我们需重点关注的是全局变量 urlpatterns, 它是一个列表类型,定义了url到视图的路由。这里的url与http协议中的url是有区别的,浏览器中的url包含的是完整的协议格式,例如:http://127.0.0.1:8080/。

 在无特殊情况下,薯条老师演示的服务器地址默认为本机:127.0.0.1,端口为8080,后续的教程中也按照此默认约定。

 在urls.py中定义的url, 是默认从服务器的根目录开始的路径。在django2.x版本中,''表示根目录,其对应的http url为http://127.0.0.1:8080/。django url的基本语法:

path/...

path表示路径名,...表示路径后面的子目录,子目录之间以/符号进行分隔。django url举例:'', 在django中使用''来表示服务器的根目录,其对应的http url为 http://127.0.0.1:8080/

 admin/

对应的http url为 http://127.0.0.1:8080/admin/

 search/image

对应的http url为http://127.0.0.l:8080/search/image。在http url中,如果携带了查询参数:

http://127.0.0.1:8080/?greeting=Django

django会自动将查询参数进行解析,然后将其存储在HttpRequest对象的属性中。在3.2节的内容中,会对查询参数的获取方法进行讲解。如需捕获路径参数,可以使用<>符号。<>的捕获语法:<converter:name> 。converter表示类型转换器,会将路径参数转换为特定的类型。name表示路径参数。下表为django支持的转换器:

str

默认转换器,匹配除了路径分隔符(/)之外的非空字符串

int

匹配0及正整数

slug

匹配字母、数字以及下划线组成的字符串

uuid

匹配格式化的uuid,通过python内置模块

path

匹配任何非空字符串,包含了路径分隔符(/)

url路径捕获举例:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.Home.as_view()),
    path('/personal/<int:id>/', blog.personal)
]

# /personal/<int:id>/表示将id作为路径参数传递给blog.personal视图,限定的格式为0及正整数

# 对应的视图函数personal
def personal(request, id):
    # id表示已捕获的路径参数id
    return HttpResponse()

 3.1.2 为url取一个别名

path函数中提供了一个name参数,可以为定义的url取一个别名。设置url别名的代码举例:

 path('search/for/search/', blog.search, name='search')

在上文代码中,将url:search/for/search/的别名设置为search。为url设置别名的好处有以下两点:

(1) 别名相当于一个助记符

(2) 在模板文件(html)中可能会引用相关的url,当对url进行改动时(别名保持不变),也不会对模板文件造成影响。

 3.1.3 在url中使用正则表达式

考虑这样的一种场景,在博客系统中每个页面都对应一个唯一的ID号,例如如下的http url形式:

http://chipscoco.com/blog/0.html

http://chipscoco.com/blog/1.html

http://chipscoco.com/blog/2.html

......

http://chipscoco.com/blog/1314.html

如果按照常规的方法,逐一的手动配置url与视图的路由,会异常繁琐且低效。对于这种情况,可以使用正则表达式。通过django的内置函数re_path,可以在url中使用正则表达式,使用re_path函数需要从django.urls模块中进行导出。现在通过re_path函数将上文中的url例子与视图关联起来。

代码实例:

re_path('blog/(\d+).html', blog.blog)

在正则表达式中的url中,()括起来的正则表达式,相当于一个占位符,会作为参数按序传递给对应的视图。

视图代码实例:

def blog(request, id):
    if request.method == "GET":
        return HttpResponse(str(id))

在上文的视图代码中,参数id对应的是url中的(\d+)表达式的值。对于url别名以及在url中使用正则表达式,在第4章中介绍Django模板时,会通过代码实例来进行讲解。现在我们熟悉了django url的基本语法,以及其与http url的对应关系,接下来的学习内容是掌握视图的定义及用法。

在django中,视图可分为两种类型:函数类型的视图,类类型的视图。

3.1.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: