前言
- 本篇来学习Django的视图和路由
视图
- 使用视图时需要进行两步操作
1. 定义视图
- 视图就是一个Python函数,被定义在应用的views.py中.
- 视图的第一个参数是HttpRequest类型的对象reqeust,包含了所有请求信息.
- 视图必须返回HttpResponse对象,包含返回给请求者的响应信息.
- 需要导入HttpResponse模块 :from django.http import HttpResponse
# views.py from django.http import HttpResponse # Create your views here. # 定义视图 def index(): return HttpResponse('index')
2. 配置URLconf
查找视图的过程 :
- 请求者在浏览器地址栏中输入URL, 请求到网站.
- 网站获取URL信息.
- 然后与编写好的URLconf逐条匹配.
- 如果匹配成功则调用对应的视图.
- 如果所有的URLconf都没有匹配成功.则返回404错误.
URL配置
1.在项目中定义URLconf
# 项目中的urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('book.urls')) ]
2.在应用中定义URLconf
# 应用中新建urls.py # -*- coding: utf-8 -*- # @Time : 2022/7/10 # @Author : 大海 from django.conf.urls import url from book import views urlpatterns = [ url(r'^$', views.index), ]
视图处理过程
URL
配置规则
配置主要有三个:path、re_path、url,接下来具体分析下这三个有什么区别。
- path 只能绝对匹配路径地址,不支持正则匹配
- re_path 支持正则匹配,django 1.x版本常用
- url 支持正则匹配,实际上就是return re_path, django2.x版本推荐
# book\urls.py from django.conf.urls import url from django.urls import path, re_path from book import views urlpatterns = [ url(r'^demo/$', views.demo), path("index/", views.index), re_path('^$', views.index), ]
- 在浏览器上访问 http://127.0.0.1:8000/index/, http://127.0.0.1:8000/, http://127.0.0.1:8000/demo/ 都能正确访问到对应内容。
动态URL
# urls.py from django.conf.urls import url from django.urls import path, re_path from book import views urlpatterns = [ url(r'^demo/$', views.demo), path("index/", views.index), re_path('^$', views.index), url('^demo/page=\d+$', views.demo) # \d+ 正则匹配,匹配任意数字 ]
# views.py def date_time(request, year, month): return HttpResponse("获取当前页面home时间标签:%s年/%s月" % (year, month)) # urls.py urlpatterns = [ url(r'^demo/$', views.demo), path("index/", views.index), re_path('^$', views.index), url('^demo/page=\d+$', views.demo), # \d+ 正则匹配,匹配任意数字 path('archive/<year>/<month>', views.date_time), url(r'^archive1/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})$', views.date_time) ]