django2.0版的path,path转化器,图书管理系统表关系

这篇博客回顾了Django2.0的path功能,探讨了如何通过path解决参数转化和重复代码的问题,特别是在图书管理系统表关系设计中的应用。文章介绍了path的基本规则和转换器的使用,简化了URL配置和参数处理。
摘要由CSDN通过智能技术生成

一.昨日回顾

1 django orm 连接mysql
	-1 安装pymysql
	-2 setting中配置
	-3 django默认用过的mysqldb,在app的__init__.py中写两句话
	-4 后续操作完全一样
2 pycharm链接mysql,sqlite
3 路由的基本使用
	-1.x中 url函数,四个参数
4 路由分发
	-不同app有自己的路由关系
	-127.0.0.1/app01/login
	-根路由 url('app01',include('app01.url'))
5 无名分组
	-127.0.0.1/login/4444/55666 444455666会当做位置参数传递给视图函数
	-url(r'^login/(\d+)/(\d+)',include('app01.url'))
6 有名分组
	-url(r'^login/(?P<year>\d+)/()',include('app01.url'))
	-跟无名分组不能混用
7 反向解析
	-动态获取路由
	-视图函数
		-url=reverse('路由别名')
	-模板文件
		-{% url '路由别名' %}
8 名称空间
	-name重名了,不知道反向解析找的是哪一个,在include路由发布时,给每个路由加一个名称空间
	-url=reverse('名称空间:路由别名')
	--{% url '名称空间:路由别名' %}

二.django2.0版的path

12.x以后,建议使用path,是一个准确路径
2 使用正则方式,推荐使用re_path,用法跟url一模一样

django2.0的re_path和1.0的url一样

思考情况如下:

urlpatterns = [  
    re_path('articles/(?P<year>[0-9]{4})/', year_archive),  
    re_path('article/(?P<article_id>[a-zA-Z0-9]+)/detail/', detail_view),  
    re_path('articles/(?P<article_id>[a-zA-Z0-9]+)/edit/', edit_view),  
    re_path('articles/(?P<article_id>[a-zA-Z0-9]+)/delete/', delete_view),  
]

考虑下这样的两个问题:

第一个问题,函数 year_archive 中year参数是字符串类型的,因此需要先转化为整数类型的变量值,当然year=int(year) 不会有诸如如TypeError或者ValueError的异常。那么有没有一种方法,在url中,使得这一转化步骤可以由Django自动完成?

第二个问题,三个路由中article_id都是同样的正则表达式,但是你需要写三遍,当之后article_id规则改变后,需要同时修改三处代码,那么有没有一种方法,只需修改一处即可?

在Django2.0中,可以使用 path 解决以上的两个问题。
基本示例
这是一个简单的例子:

from django.urls import path  
from . import views  
urlpatterns = [  
    path('articles/2003/', views.special_case_2003),  
    path('articles/<int:year>/', views.year_archive),  
    path('articles/<int:year>/<int:month>/', views.month_archive),  
    path('articles/<int:year>/<int:month>/<slug>/', views.article_detail),  
  # path才支持,re_path不支持
  path('order/<int:year>',views.order),
]  

基本规则:

  • 使用尖括号(<>)从url中捕获值。 捕获值中可以包含一个转化器类型(converter type),比如使用 int:name
  • 捕获一个整数变量。若果没有转化器,将匹配任何字符串,当然也包括了 / 字符。
  • 无需添加前导斜杠。

在这里插入图片描述

三.path转化器

1 5个内置转换器
'''
str,匹配除了路径分割符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0.
slug,匹配字母,数字以及横杠,下划线组成的字符串
uuid,匹配格式化的uuid,075194d3-6885-417e-a8a8-6c931e272f00(唯一标识)。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
'''
2 例子
-path('login/<int:year>',views.login),
-path('login/<str:year>',views.login),
-path('login/<path:p>',views.article),

3 高级例子
-实现匹配这种路径:http://127.0.0.1:8000/liuqingzheng/p/4444.html
-path('<str:name>/p/<int:id>.html',views.article),
-re_path(r'^(?P<name>.*?)/p/(?P<id>/d+).html$',views.login),
-url(r'^(?P<name>.*?)/p/(?P<id>\d+).html$',views.login),  # url在2.x以后不建议使用
4 转换器可以不可以在re_path中使用? 不能!!!

三.自定义转换器(不重要)

1 写一个类
-regex属性:这里写的正则表达式就能匹配
-to_python方法
-to_url方法
2 注册这个类
	register_converter(类名,'lqz')
3 使用在path中更实用
	path('<lqz:name>/',views.article),

四.图书管理系统表关系(图书管理系统)

0 表中字段的关系
	-一对一
	-一对多
	-多对多
1 需要有哪几个表
	-书籍表:book
		-id
		-name
		-price
		-publish
	-作者:author
		-id
		-name
		-age
		-author_detail_id 1
	-作者详情:authordetail
		-id
		-address
		-phone
		#-author_id
	-出版社:publish
		-id
		-name
		-addr
		-email
2 表之间的关系
	-书和作者:多对多:需要创建第三张表(中间表,关系表)
	-书和出版社:一对多:一对多的关系一旦确立,关联字段写在多的一方
	-作者和作者详情:一对一,关联字段写在谁都可以,推荐写在查询多的一方
3 其实 一对一的关系,是一对多+unique(理解这句话)

五.补充

partial是什么,怎么用,有什么用?
短链生成:https://www.layui.com/demo/carousel.html   https:/a.com/asfdasd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值