Django基础-8

88 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

Django基础6

写在前面

初一的学生,请多多关照,希望能在掘金记录自己的学习历程!❤️

这一篇是接着上一篇的基础写的,也就是Django基础-7这一篇,没有看过的请先去康康

路由

URL是Web服务的入口,用户通过浏览器发送过来的请求,都发送到一个指定的URL地址,然后服务器会将相应返回给浏览器。路由就是用来处理处理URL和函数之间关系的调度器。 路由流程如下:

查找全局urlpatterns变量,即blog/urls.py文件中定义的urlpatterns变量
按照先后顺序,对URL逐一匹配urlpatterns列表中每个元素
找到第一个匹配时停止寻找,根据匹配结果执行对应的处理函数
如果没有找到匹配或出现异常,进行错误处理

Django支持的路由形式

精确URL匹配一个操作函数

是最简单的形式,适合对静态URL的相应;

不以"/"开头,但以"/"结尾

例如在blog/urls.py的urlpatterns中添加以下代码:

path('articles/',views.article_list),

路径转换器格式

例如:

path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),

常用的格式转换

str   匹配除分隔符外的非空字符,默认就是str:
int   0和正整数
slug  匹配字母、数字、横杠、下划线组成的字符串
uuid  匹配格式化的UUID
path  匹配任何非空字符串

接下来在blog/urls.py文件中创建路由,代码如下:

from django.urls import path    # 导入path
from . import views             # 导入自定义的views模块

urlpatterns = [
    path('articles/', views.article_list),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    ]

上述代码导入了views.py文件,接下来在当前目录中创建views.py文件,创建上述代码中的函数,代码如下:

from django.shortcuts import render
from django.http import HttpResponse
def article_list(request):
    return HttpResponse('article_list函数')
def year_archive(request,year):
    return HttpResponse(f'year_archive函数接收参数year:{year}')
def month_archive(request,year,month):
    return HttpResponse(f'year_archive函数接收参数year:{year},month:{month}')
def article_detail(request,year,month,slug):
    return HttpResponse(f'year_archive函数接收参数year:{year},month:{month},slug:{slug}')

启动服务

输入http://127.0.0.1:8000/articles/

f77c6908ed2bd9fea933c7c835ee183.png 输入http://127.0.0.1:8000/articles/2020/

8ad3ef7ba9d245c26c620f6bb90e7b1.png 输入http://127.0.0.1:8000/articles/2020/05

1f508035b8d423bcc998ff24efb9582.png 输入http://127.0.0.1:8000/articles/2020/05/python/

2313cfcc4703e9956e02daa56508aaa.png