数据库表中字段的增删改查,路由基础.有名无名分组.多app共存的路由分配.多app共存时模板冲突问题.创建app流程.七路由分发.八路由别名,九名称空间.十反向解析.十
要须心地收汗马,孔孟行世目杲杲。这篇文章主要讲述数据库表中字段的增删改查,路由基础.有名无名分组.多app共存的路由分配.多app共存时模板冲突问题.创建app流程.七路由分发.八路由别名,九名称空间.十反向解析.十相关的知识,希望能为你提供帮助。
一、数据库表中字段的增删改查
‘‘‘ 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ‘‘‘
二、路由基础
‘‘‘ # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径视图函数地址默认关键字参数(了解)路由别名# r‘index‘ 只要请求中含有index都可以匹配成功 url(r‘index‘, views.index)#r‘^index‘ 只要开头是index都可以匹配成功 url(r‘^index‘, views.index)# r‘^index$‘ 只能匹配index,不能匹配index/ url(r‘^index$‘, views.index)# r‘^index/$‘ 不仅能匹配index/,还能匹配index(匹配index时先拿index匹配,如果失败,会自动添加/再次匹配) url(r‘^index/$‘, views.index)#含有关键字参数,视图函数必须接受这个参数,并且名字必须与关键词参数的key名字相同 url(r‘^testkw/$‘, views.testkw, {‘num‘: 88888})# def testkw(request, num):# 路由匹配如何关闭默认添加/ ①在sttings.py中将中间件的 ‘django.middleware.common.CommonMiddleware‘ 这行代码注掉 ②在settings.py下添加 APPEND_SLASH = False ‘‘‘
三、有名无名分组
‘‘‘ 正则 import re res = re.search(‘/index/(d+)/(d+)‘, ‘/index/123/456‘) print(res.group(1)) #123 print(res.group(2)) #456#从左往右第一个左括号就是第一个分组 res = re.search(‘(/index/(d+)/(d+))‘, ‘/index/123/456‘) print(res.group(1)) #/index/123/456 print(res.group(2)) #123 print(res.group(3)) #456#有名分组和无名分组,有名分组可以由名字获得也可以由编号获得 res = re.search(‘/index/(?P< num> d+)/(d+)‘, ‘/index/123/456‘) print(res.group(1)) #123 print(res.group(2)) #456 print(res.group(‘num‘)) #123‘‘‘
‘‘‘ # 无名分组:/testnoname/10/ url(r‘^testnoname/(d+)/$‘, views.testnoname) # def testnoname(request, var)# var=10 必须要设置一个参数接受10这个值,这个参数命名随意# 有名分组:/testname/10/1/ url(r‘^testname/(?P< num> d+)/(?P< page> d+)/$‘, views.testname) # def testname(request, page, num)# page=1 num=10 参数必须与有名分组的名字一致且无先后顺序# 注:无名分组与有名分组不能混用 ‘‘‘
四、多app共存的路由分配
‘‘‘ # 模块导入过程中从上而下进行导入,如果名字相同只有最后一个起作用 # 在主路由中要配置多个app,在urls.py中导入视图函数模块名字相同,我们需要要对视图函数调用起别名 from app01 import views as app01_views from app02 import views as app02_views url(r‘^app01/test_page/$‘, app01_views.test_page), url(r‘^app02/test_page/$‘, app02_views.test_page), ‘‘‘
五、多app共存时模板冲突问题
‘‘‘ 同名的模板的查找顺序是根据settings.py中 INSTALLED_APPS 的配置顺序从上而下进行查找的如何解决多app共存时模板冲突问题? 方法1:在对应应用下建立自己的templates,再在templates下建立与应用名同名的文件夹,模板文件放在应用名同名的文件夹下 (实际开发中运用少,不要用) 方法2:在项目根目录下的templates中建立每一个应用同名的文件夹,每个应用的模板文件放在自己应用名文件夹下使用:render(request, ‘app_name/test.html‘) ‘‘‘
六、创建app流程
‘‘‘ 1. python3 manage.py startapp app_name 2. 去settings中配置INSTALLED_APPS, 添加记录:‘app_name.apps.App_nameConfig‘ # 注:app配置的顺序决定了(共同资源冲突下的)查找顺序 ‘‘‘
七、路由分发
‘‘‘ # 分担总路由的代码压力, 将每个app的自身路由配置交给app自己的ulrs.py来管理(分文件管理路由)1.在每一个应用中建立自身的urls.py文件,语法同主路由 2.在主路由进行分发 #url(r‘^blog/‘, include(‘blog.urls‘))from django.conf.urls import include urlpatterns = [ url(r‘^app01/‘, include(‘app01.urls‘)), url(r‘^app02/‘, include(‘app02.urls‘)), ] # 注:主路由分发一定不能使用$正则语法标识结束 (错误eg: ^app01/$) ‘‘‘
八、路由别名
‘‘‘ 1.有些路由会被大量访问(直接访问、间接访问) 2.这些路由可能后期还会发生变化 3.可以给路由设置别名 url(r‘^delete_flag_test/(d+)/$‘, views.delete_flag, name=‘delete_flag_test‘)前端通过别名访问,在有名和无名分组下使用url别名进行传参的方式一致 < a href="https://www.songbingjia.com/android/{% url ‘路由别名‘ ‘传入有名无名分组所需参数‘ %}"> < /a> ‘‘‘
九、名称空间
‘‘‘ 如果没有名称空间,有同名的请求时会从上而下进行解析,都会执行app02下的test名称空间的设置: 主路由: from django.conf.urls import include urlpatterns = [ url(r‘^app01/‘, include(‘app01.urls‘, namespace=‘app01‘)), url(r‘^app02/‘, include(‘app02.urls‘, namespace=‘app02‘)), ]app01应用下路由 from django.conf.urls import url from app01 import views urlpatterns = [ url(r‘^test/‘, views.test, name=‘test‘) ]app02应用下路由 from django.conf.urls import url from app02 import views urlpatterns = [ url(r‘^test/‘, views.test, name=‘test‘) ]前端页面反向解析: {% url ‘名称空间名:路由别名‘ %} {% url ‘app01:test‘ %} | {% url ‘app02:test‘ %}视图函数reverse方法:url = reverse(‘app01:test‘) | url = reverse(‘app02:test‘) ‘‘‘
十、反向解析
‘‘‘ 反向解析:通过路由别名获取真实的路由路径,当真实路径发生改变时,通过别名解析出真实路径的代码不需要改变from django.shortcuts import reverse 在视图函数中通过reverse方法反向解析出真实的路径# 1.不带分组:url(r‘可能会变的真实路由‘, 视图函数, name=‘路由别名‘) url = reverse(‘路由别名‘)# 2.无名分组:url(r‘可能会变的真实路由(带无名分组)‘, 视图函数, name=‘路由别名‘) url = reverse(‘路由别名‘, args=(给无名分组赋值))#args后面跟是一个元组# 3.有名分组:url(r‘可能会变的真实路由(带有名分组)‘, 视图函数, name=‘路由别名‘) url = reverse(‘路由别名‘, kwargs={给有名分组赋值,key就是有名分组名}) ‘‘‘
十一、2.x新特性
‘‘‘ from django.urls import path, re_path # 向下兼容,可以使用url,但是不建议使用url, 而是使用与url相同的re_path from django.conf.urls import url urlpatterns = [ path(‘index/‘, views.index), # page/< int:msg> /page/(?P< msg> (d+))# 访问/page/123/ # path(‘page/< int:msg> /‘, views.page), # path(‘page/< str:msg> /‘, views.page), # path(‘page/< path:msg> /‘, views.page), # path(‘page/< slug:msg> /‘, views.page), path(‘page/< uuid:msg> /‘, views.page), ]# 1. 2.x版本re_path的使用方式同1.x版本url # 2. path写的是绝对字符串,请求地址必须与路由地址完全匹配,后面斜杠省略会自动添加 # 3. path拥有五个转换器: -- str:匹配除路径分隔符(/)外的字符串,默认 -- int:匹配自然数 -- slug:匹配字母、数字、横杠及下划线组成的字符串 -- uuid:匹配uuid形式的数据uuid是一个算法,每次执行都不一样 -- path:匹配任何字符串,包括路径分隔符(/) (不能用?)‘‘‘
十二、自定义转换器
‘‘‘ # 原因:自定义正则匹配目标路径在应用里面建一个conventer.py文件,在下面定义一个如下class 语法: 1.自定义类 # 匹配11位的185电话 class CVT185phone: # 正向匹配过程 regex = ‘185d{8}‘ def to_python(self, value): return int(value) # 反向解析过程 def to_url(self, value): return ‘%11d‘ % value# 在主路由中 from django.urls import register_converter from 所在路径 import CVT185phone register_converter(CVT185phone, ‘phone185‘)path(‘page/< phone185:msg> /‘, views.page, name="pages") ‘‘‘
【数据库表中字段的增删改查,路由基础.有名无名分组.多app共存的路由分配.多app共存时模板冲突问题.创建app流程.七路由分发.八路由别名,九名称空间.十反向解析.十】
推荐阅读
- Android Studio无法启动adb 或不能识别device
- eclipse中无法新建Android工程 出现问题(Plug-in org.eclipse.ajdt.ui was unable to load)
- xsl:apply-templates 模板的应用
- Android机子屏幕适配最简单最全面方案
- AndroidStudio初次使用
- Android9.0无法加载图片及访问不了服务器问题
- apply,call,bind区别
- uni-app开发踩坑记录
- 如何在Android中启动JAVA程序