系统开发师,如何结合搜索检索与seo推广,产品市场营销策划方案,南通优普网站建设制作路由层(urls.py) Django的路由层是用于将URL映射到视图函数的机制。它用于确定请求URL#xff08;HTTP请求#xff09;应该被哪个视图函数处理。 Django的路由层包括两个部分#xff1a; URL模式#xff1a;匹配请求URL#xff0c;决定应该使用哪个视图函数来处理请求。UR…路由层(urls.py) Django的路由层是用于将URL映射到视图函数的机制。它用于确定请求URLHTTP请求应该被哪个视图函数处理。 Django的路由层包括两个部分 URL模式匹配请求URL决定应该使用哪个视图函数来处理请求。URL配置将URL模式与应用程序中的视图函数关联起来以便Django知道如何处理请求。 URL模式通常使用正则表达式来匹配请求URL。例如下面是一个简单的URL模式 from django.urls import path
from . import viewsurlpatterns [path(articles/int:year/, views.year_archive),
]总体来说Django的路由层提供了一种灵活而强大的方式来处理请求URL并将它们连接到相应的视图函数。 路由匹配 一路由匹配按照正则匹配一旦正则能够匹配到内容会立刻执行对应的视图函数。不会再继续匹配了 在setting.py中 urlpatterns [
url(r^admin/, admin.site.urls),
url(rtest,views.test),
url(rtestadd,views.testadd) #第一个参数是一个正则表达式是访问后端静态资源的接口前缀] 用户在浏览器中输入url时不加最后的斜杠django会让浏览器默认自动加上斜杠 可以在配置文件settings.py中指定是否开启该功能 APPEND_SLASH True 表示开启 django会让浏览器默认自动加上斜杠 APPEND_SLASH False 表示不开启 无名分组 二路由匹配url中的正则表达式分组分组就是给一段正则表达式加括号 无名分组 匹配的时候会将括号内正则表达式匹配到的内容当做位置参数传递给对应的视图函数 在urls.py文件中 url(r^test/([0-9]{4})/,views.test) 在view.py 视图函数中 def index(request,args):return HttpResponse() 有名分组 有名分组 将括号内正则表达式起一个别名匹配的时候会将括号内的有别名的正则表达式匹配到的内容当做关键字参数传递给对应的视图函数 在urls.py 路由中 url(r^test/(?Pyear\d)/,views.test) # 起别名的方法P别名 在view.py 视图函数中 def index(request,year):... 这里的视图函数中的第二个参数就是分组的名字 注意无名有名能否混合不能使用。但是同一种命名方式 可以使用多个 url(r^test/(\d)/(?Pyear\d)/, views.test), #这是错的有名无名不能混合使用。 url(r^test/(\d)/(\d)/,views.test), #同一种命名方式 可以使用多个 url(r^test/(?Pxxx\d)/(?Pyear\d)/,views.test) # 同一种命名方式 可以使用多反向 反向解析 反向解析通过一些方法能够得到一个结果该结果可以访问到对应的url 反向解析的作用 p要反向解析 才能拿到后端views中返回的html文件中的信息a classbtn btn-primary btn-lg href{% url detail %} rolebutton点我/a
/p 方法先给路由与视图函数对应关系起一个名字。前端和后端可以根据这个名字通过一些方法能够得到一个结果该结果可以访问到对应的url 在urls.py路由中 url(r^testadd/,views.testadd,nameadd) 前端解析表示无论testadd改成什么在前端页面html都能拿到 r^...../ 中的东西 后端解析表示无论testadd改成什么在后端视图view.py文件中都能拿到r^...../中的东西 前端解析 在html文件中 {% url add %}比如a href{% url add %}11/a 后端解析 在views.py文件中 from django.shortcuts import reverseurlreverse(add) # _url是变量reverse(add) 表示的是r^...../中的东西 无名分组反向解析 在urls.py路由中 url(r^testadd/(\d)/,views.testadd,nameadd) 前端解析表示无论testadd改成什么在前端页面html都能拿到 r^...../ 中的东西 后端解析表示无论testadd改成什么在后端视图view.py文件中都能拿到 r^...../ 中的东西 前端解析 在html中 {% url add 1 %}# 注意这里的数字一般都是用户的Id 既是user_obj.id 既是{% url 反向解析起的名字 user_obj.id %} 比如a href{%url add 11%}11111/a 后端解析 在views.py中 from django.shortcuts import reverse_
urlreverse(add,args(1,))# _url是变量reverse(add) 表示的是 r^...../ 中的东西args(1,) 接收的是数字通常是数据的主键值传给了(\d) 有名分组反向解析 在urls.py中 url(r^testadd/(?Pyear\d)/,views.testadd,nameadd) 前端解析表示无论testadd改成什么在前端页面html都能拿到 r^...../ 中的东西 后端解析表示无论testadd改成什么在后端视图view.py文件中都能拿到 r^...../ 中的东西 前端解析 在html中 {% url add 1 %} {% url 反向解析的名字 user_obj.id %} 注意推荐用这里的数字一般都是用户的Id 既是user_obj.id 比如a href{% url add 11 %}11/a或者{% url add year 1 %} # 标准的写法 后端解析 在views.py中 from django.shortcuts import reverseurlreverse(add,args(1,)) # _url是变量reverse(add) 表示的是r^...../中的东西。args(12,) 接收的是数字通常是数据的主键值传给了(\d)_urlreverse(add,args(edit_id,))# 注意推荐用这里的数字一般都是用户的Id 或者 _url reverse(add,kwargs{year:12}) # 标准的写法 路由分发 当django项目比较庞大的时候 路由与视图函数对应关系较多总路由代码太多冗长。考虑到总路由代码不好维护所以django支持每个app应用都可以有自己的urls.py 总路urls由不再做路由与视图函数的对应关系 而仅仅只做一个分发任务的操作: 根据请求的不同识别出当前请求需要访问的功能属于哪个app然后自动下发到对应app里面的urls.py中 然后由app里面的urls.py做路由与视图函数的匹配 注意 不仅如此每个app除了可以有自己的urls.py之外 还可以有自己的static文件夹templates模板文件 应用场景 基于上面的特点基于django分小组开发会变得额外的简单。每个人只需要开发自己的app即可之后只需要创建一个空的django项目再将多个人的app全部拷贝项目下去配置文件注册由总路由分发一次即可。 使用方法需要导入一个分发的模块 from django.conf.urls import include 总路由 在urls.py文件中方法一、
from django.conf.urls import url,includefrom app01 import urls as app01_urls
from app02 import urls as app02_urlsurlpatterns [
url(r^admin/, admin.site.urls),
url(r^app01/,include(app01_urls)),
url(r^app02/,include(app02_urls))
]方法二、简写from django.conf.urls import url,includeurlpatterns [
url(r^admin/, admin.site.urls),
url(r^app01/,include(app01.urls)),
url(r^app02/,include(app02.urls))
] 子路由 from django.conf.urls import url
from app01 import viewsurlpatterns [url(r^index/,views.index)]from django.conf.urls import url
from app02 import viewsurlpatterns [url(r^index/,views.index)] 虚拟环境 虚拟环境就类似于一个纯净的python解释器环境就类似于你重新下载一个python解释器 我们想做到针对不同的项目 只安装项目所需要的功能模块项目用不到的一概不装来避免加载资源时的消耗 如何创建虚拟环境 Django版本区别 1. 路由文件 django1.x中使用的是url:支持正则 django2.x中使用的是path(不支持正则:精准匹配)和re_path(url)支持正则 path但是它只支持五种转换器 Django默认支持以下5个转化器 ● str,匹配除了路径分隔符/之外的非空字符串这是默认的形式 ● int,匹配正整数包含0。 ● slug,匹配字母、数字以及横杠、下划线组成的字符串。 ● uuid,匹配格式化的uuid如 075194d3-6885-417e-a8a8-6c931e272f00。 ● path,匹配任何非空字符串包含了路径分隔符/不能用 自定义转化器 2. 创建表关系 django2中必须指定参数on_delete djanxo1中不用指定级联更新级联删除 伪静态的概念(了解) 伪静态: 其实就是把动态页面改成像静态页面的样子 动态页面 它不是在html页面中写死的它是根据后端的数据变化而变化 我们的页面上的数据是从数据库查询出来都是可以是动态页面 静态页面 html css案例 https://www.cnblogs.com/bigsai/p/17827160.html # 这个就是伪装之后的页面 伪装成静态页面的目的 为了更好的被各大搜索引擎抓大静态页面是最容易被抓到的有个别的网站就会做伪装seo seo优化关键词被容易搜索到 sem: 广告(RMB) 怎么样去伪装 url(r^v1/v2/test.html/$, views.test) 名称空间(了解) # 第二种方式
url(r^app01/, include(app01.urls, namespaceapp01)),
url(r^app02/, include(app02.urls, namespaceapp02)),# 解析
resreverse(app01:login, args(11,22)) # /v1/v2/v3/home/1
resreverse(app02:login, args(11,22)) # /v1/v2/v3/home/1 END