翼度科技»论坛 编程开发 python 查看内容

Django学习笔记:第三章D的路由和视图

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
1.网站的入口--路由和视图

URL是网站Web服务的入口。用户在浏览器输入URL发出请求后,django会根据路由系统,运行对应的视图函数,然后返回信息到浏览器中。
1.1 认识路由

创建项目时,会自动生成urls.文件,文件中定义了项目的路由信息,成为项目的路由解析入口。在自建的应用中可以手动配置独立的urls.py文件。
1.1.1 路由系统的基本配置

urls.py文件
  1. from django.contrib import admin
  2. from django.urls import path
  3. from myapp import views
  4. urlpatterns = [
  5.     path('index/', views.index, name='index'),
  6. ]
复制代码
先导入对应的视图函数,然后在urlpatterns列表中进行url路由配置
path配置语法
  1. path(路由, 视图函数, 别名)
复制代码
1.1.2 用“路由包含”简化项目复杂度

思路:为每个应用创建一个urls.py文件,将应用的路由配置分别单独放置。
用户发起请求时,会从根路由寻找每个应用的路由信息,生成完整的路由列表。
路由配置规则:
urlpatterns列表会从上到下进行匹配

  • 匹配成功,会根据视图函数进行跳转
  • 匹配失败,则返回404错误
  • 若定义了子路由,则在跟路由中使用include('应用名.urls') 来加载子路由。如果urls的第一部分被匹配看,则其余部分会在子路由中进行匹配。
  • 路由信息一般以/ 结尾
1.1.3 include使用方法

在 Django 项目中,我们可以通过 URLconf 文件(即 views.py 文件)来定义路由规则。而在这个 URLconf 文件中,我们可以使用 include() 函数来指定自己应该包含的其它 URLconf 模块。
通过include可以设置多级路径,语法:
  1. path('', include('应用名称.urls'))
复制代码
  1. urlpatterns = [
  2.     path('', include('myapp.urls'))
  3. ]
复制代码
然后在对应的应用路由文件和视图函数进行配置
myapp的urls.py
  1. from django.contrib import admin
  2. from django.urls import path
  3. from myapp import views
  4. urlpatterns = [
  5.         path('myapp/index/', views.index)
  6. ]
复制代码
myapp的views.py
  1. from django.shortcuts import render
  2. # Create your views here.
  3. from django.http import HttpResponse
  4. def index(request):
  5.         return render(request, 'myapp/index.html')
复制代码
1.1.3 实战一下


  • 在项目根目录运行
  1. python manage.py startapp myapp1
  2. python manage.py startapp myapp2
复制代码
创建两个应用,myapp1 myapp2

  • 在项目的路由文件中配置
  1. urlpatterns = [
  2.     path('', v.index),  # 这里设置了启动的默认页面
  3.     path('admin/', admin.site.urls),
  4.     path('index/', v1.index, name='index'),
  5.     path('', include('myapp.urls')),
  6.     path('', include('myapp1.urls')),
  7.     path('', include('myapp2.urls'))
  8. ]
复制代码
然后在依次对应用的路由和视图函数进行配置(没有则创建)

  • 在模板中进行html文件编写


  • 启动应用
  1. python manage.py runserver
复制代码




1.2 路由参数

我们不可能为所有页面都手动配置路由规则,需要引入URL参数进行动态配置。
1.2.1 编写带URL参数的路由

Django动态URL的作用是根据特定的参数动态生成URL。这样,我们可以使用相同的视图函数和模板来处理不同的请求,而不必为每个请求编写单独的视图函数。
这个动态的意思是:根据用户输入的地址信息来显示对应的页面信息。

  • 配置
在myapp的urls.py
  1. urlpatterns = [
  2.         path('myapp/index/', views.index),
  3.     path('myapp/show/<int:id>/', views.show),
  4. ]
复制代码
在myapp 的views.py  增加show函数
  1. def show(request, id):
  2.         return HttpResponse('myapp中的show方法, 参数为id, 值为' + str(id))
复制代码

  • 启动项目


1.2.2 介绍URL参数

在上面的例子中,路由配置为
  1. path('myapp/show/<int:id>/', views.show),
复制代码
< > 中的内容就是URL参数,语法:
  1. [/code]URL参数有4种数据类型
  2. [table][tr]参数数据类型说明[/tr][tr][td]str[/td][td]任意非空字符串,不包含/ ,默认类型[/td][/tr][tr][td]int[/td][td]匹配0和正整数[/td][/tr][tr][td]slug[/td][td]匹配任何ASCII字符,连接符和下划线[/td][/tr][tr][td]uuid[/td][td]匹配一个UUID格式的字符串,该对象必须包括- ,所有字母必须小写。[/td][/tr][/table][size=4]1.2.3 [实战] 用re_path() 方法正则匹配复杂路由[/size]
  3. 与path方法作用一样,多了个可以使用正则表达式的功能。
  4. 与path一样,使用时,需要导入模块:
  5. [code]from django.urls import re_path
复制代码
语法:
  1. (?P<name>pattern)   
  2. # name是匹配的字符串名称,pattern是要匹配的模式
  3. # name并不会显示在地址栏中,只有被匹配的字符才会出现在地址栏
  4. # 可以同时有多个表达式,用&连接
复制代码
一个例子
myapp应用中,配置urls.py  获取4个数字赋值给year
  1. urlpatterns = [
  2.     path('myapp2/index/', views.index),
  3.     re_path(r'myapp2/list/(?P<year>\d{4})/', views.article_list),
  4. ]
复制代码
myapp应用中,配置views.py
  1. def article_list(request, year):
  2.         return HttpResponse("myapp2中的article方法, 参数为year, 指定4位, 值为" + str(year))
复制代码

  • 启动

输入超过4个或少于4个 都会访问失败
1.2.4 反向解析路由

反向解析路由是指通过给定的URL路径反向得到Django中定义的路由。它的作用是方便在代码中生成URL,而不需要手动拼接URL。
路由正常进行配置
  1. path('myapp/url_reverse', views.url_reverse, name = 'myapp_url_reverse')
复制代码

  • name后面名称最好为应用名_视图函数名称
  • name相当于配置项的别名。可以在视图函数或是模板的HTML文件中调用它
  • 根据name得到路由配置中的URL地址,这就是 反向解析路由
  • 优点:只要name不变,URL地址可以任意改变
例子
在myapp1 中进行配置
urls.py
  1. path('myapp1/url_reverse/', views.url_reverse, name = 'myapp1_url_reverse')
复制代码
views.py
  1. from django.urls import reverse # 记得导入
  2. def url_reverse(request):
  3.         # 进行反向解析
  4.         print('反向解析结果:' + reverse('myapp1_url_reverse'))
  5.         return render(request, '2/url_reverse.html')
复制代码
在模板中新建文件 2/url_reverse.html,添加代码
  1.     在HTML中使用url标签进行反向解析
  2.    
  3.     {% url 'myapp1_url_reverse' %}
复制代码
启动!


来源:https://www.cnblogs.com/lmc7/p/17574517.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具