当前位置: 首页 > news >正文

我想看b站直播苹果手机使用软件提高百度推广排名

我想看b站直播苹果手机,使用软件提高百度推广排名,疫情太原最新消息,做平面设计都在那个网站找免费素材路由系统 1.Django1中的路由1.1 普通形式1.2 分组1.2.1 无名分组1.2.2 有名分组 2. Django2版本2.1 传统的路由2.2 正则表达式路由 3. 路由分发3.1 include(一般使用此方式做路由分发)3.2 手动分发 4. name别名及使用name的反向URL生成4.1 一般情况下的别名使用及反向生成4.2 分…

路由系统

    • 1.Django1中的路由
      • 1.1 普通形式
      • 1.2 分组
        • 1.2.1 无名分组
        • 1.2.2 有名分组
    • 2. Django2+版本
      • 2.1 传统的路由
      • 2.2 正则表达式路由
    • 3. 路由分发
      • 3.1 include(一般使用此方式做路由分发)
      • 3.2 手动分发
    • 4. name别名及使用name的反向URL生成
      • 4.1 一般情况下的别名使用及反向生成
      • 4.2 分组中方向解析URL
    • 5. 名称空间

1.Django1中的路由

1.1 普通形式

在Django1的版本中,普通路由url进行匹配,其格式如下:

urlpatterns = [url(regex, view, kwargs=None, name=None),
]
  1. url的regex参数,即第一个参数为正则表达式
  2. view参数通常为视图函数,用来处理业务逻辑
  3. kwargs:接收传递给视图函数的参数
  4. name:为regex参数地址的别名,在地址过长时可用别名反向解析

示例:

urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index$',views.index)
]

PS:需要注意

  1. 正则表达式不需要添加一个前导的反斜杠,因为每个URL都有。例如,应该是^index而不是 ^/index
  2. 每个正则表达式前面的’r’ 是可选的但是建议加上
  3. 如果我们想匹配的路径就只是index/,那么正则表达式应该有开始符与结束符, 如 ^index/$。这样逻辑才算严谨
  4. 若正则为r'index/'在浏览器输入:http://127.0.0.1:8001/index/,Django会拿着路径部分index/去路由表中自上而下匹配正则表达式,一旦匹配成功,则立即执行其后的视图函数,不会继续往下匹配,此处匹配成功的正则表达式是 r'^index/$'
  5. 无论是否书写最后的/,都可以匹配成功,是因为配置中APPEND_SLASH默认为True且并不会出现在配置文件中,若想精确匹配最后的/则应该去settings文件中将APPEND_SLASH设置为False。

1.2 分组

分组实际上可以理解为get请求的第二种方式:

  1. get请求的第一种方式:
    http://127.0.0.1:8000/test/?a=1&b=2
  2. get请求的第二种方式:
    http://127.0.0.1:8000/test/123/11
1.2.1 无名分组

无名分组实际上是re的分组写法,即把正则中小括号里的匹配到的内容以位置参数的形式传递给视图函数,如下:

urls.py文件
from django.contrib import admin
from django.conf.urls import url
from app01 import viewsurlpatterns = [# 下述正则表达式会匹配url地址的路径部分为:article/数字/,匹配成功的分组部分会以位置参数的形式传给视图函数,有几个分组就传几个位置参数url(r'^article/(\d+)/$',views.article), 
]
views.py文件
from django.shortcuts import render
from django.shortcuts import HttpResponse# 需要额外增加一个形参用于接收传递过来的分组数据
def article(request,article_id):return HttpResponse('id为 %s 的文章内容...' %article_id)
测试:
python manage.py runserver 8001 # 在浏览器输入:http://127.0.0.1:8001/article/3/ 会看到: id为 3 的文章内容...
1.2.2 有名分组

当我们对分组命名后,就会按照key=value的关键字参数形式为视图函数传参,示例如下:
urls.py

from django.contrib import admin
from django.conf.urls import url
from app01 import viewsurlpatterns = [url('admin/', admin.site.urls),# 该正则会匹配url地址的路径部分为:article/数字/,匹配成功的分组部分会以关键字参数(article_id=匹配成功的数字)的形式传给视图函数,有几个有名分组就会传几个关键字参数,需要强调一点是:视图函数得到的值均为字符串类型url(r'^article/(?P<article_id>\d+)/$',views.article), 
]

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse# 需要额外增加一个形参,形参名必须为article_id
def article(request,article_id):return HttpResponse('id为 %s 的文章内容...' %article_id)

测试:

python manage.py runserver 8001 # 在浏览器输入:http://127.0.0.1:8001/article/3/ 会看到: id为 3 的文章内容...

普通分组和命名分组都是为了获取路径中的参数,并传递给视图函数,区别在于普通分组是以位置参数的形式传递,命名分组是以关键字参数的形式传递。但请注意,有名分组和无名分组不要同时使用。

2. Django2+版本

2.1 传统的路由

在Django2以上的版本中,默认的路由通过path精准匹配来识别,避免了正则可能出现的一些匹配的问题。

格式如下:


urlpatterns = [path('admin/', admin.site.urls),path('',views.show_user_info),path('show/', views.show_user_info),path('del/', views.del_user_info),path('update/', views.update_user_info),path('insert/', views.insert_user_info)
]

其用法同url并无太大区别,path的第一个参数是精确匹配。

2.2 正则表达式路由

burpatterns = [re_path(r'users/(?<xxid>\w+-\d+)/',views.users),
]

Django2+版本的re_path的用法同Django1的url完全相同,不做过多描述。

3. 路由分发

当功能较多时,都写在一个urls文件中显然并不合适,可以使用路由分发将功能拆分带不同的app中。

3.1 include(一般使用此方式做路由分发)

include('app命字.url模块名')

  1. 模块app命字/url模块名.py 文件件里必须有urlpatterns 列表
  2. 使用前需要使用 from django.conf.urls import include 导入此函数

示例:
djangoproject1/urls.py

from django.urls import path,include
urlpatterns = {path('api/', include('apps.api.urls')),path('web/', include('apps.api.urls'))
}

apps/api/urls.py

from django.urls import path
from apps.api import viewsurlpatterns = {# api/auth/path('auth/',views.auth),# api/login/path('login/',views.login)
}

path本身支持五种转换器。

  1. str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  2. int,匹配正整数,包含0。
  3. slug,匹配字母、数字以及横杠、下划线组成的字符串。
  4. uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  5. path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

例如:

  path('articles/<int:year>/', views.year_archive), # <int:year>相当于一个有名分组,其中int是django提供的转换器,相当于正则表达式,专门用于匹配数字类型,而year则是我们为有名分组命的名,并且int会将匹配成功的结果转换成整型后按照格式(year=整型值)传给函数year_archive

但是当本身条件较为复杂时,五种转换器可能并不能实现要求。针对这一系列复杂的需要,我们可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:

  • regex 类属性,字符串类型

  • to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。

  • to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

示例如下:

在app01下新建文件path_ converters.py,文件名可以随意命名

class MonthConverter:regex='\d{2}' # 属性名必须为regexdef to_python(self, value):print('===>to_python run')return int(value)def to_url(self, value):print('===>to_url run')return value # 匹配的regex是两个数字,返回的结果也必须是两个数字

在urls.py中,使用register_converter 将其注册到URL配置中:

from django.urls import path,register_converter
from app01.path_converts import MonthConverterregister_converter(MonthConverter,'mon')from app01 import viewsurlpatterns = [path('articles/<int:year>/<mon:month>/<slug:other>/', views.article_detail, name='aaa'),]

views.py中的视图函数article_detail

from django.shortcuts import render,HttpResponse,reversedef article_detail(request,year,month,other):print(year,type(year))print(month,type(month))print(other,type(other))print(reverse('aaa',args=(1988,12,'hello'))) # 反向解析结果/articles/1988/12/hello/return HttpResponse('xxxx')

测试

# 1、在浏览器输入http://127.0.0.1:8000/articles/2009/12/hello/,path会成功匹配出参数year=2009,month=12,other='hello'传递给函数article_detail
# 2、在浏览器输入http://127.0.0.1:8000/articles/2009/123/hello/,path会匹配失败,因为我们自定义的转换器mon只匹配两位数字,而对应位置的123超过了2位

3.2 手动分发


path('user/', ([path('add/', views.login),path('delete/', views.login),   # /user/delete/path('edit/', views.login),path('list/', views.login),], None, None)),

纯粹帮助提取功能的URL,防止重复编写。

4. name别名及使用name的反向URL生成

4.1 一般情况下的别名使用及反向生成

别名的使用

from django.urls import path
from app01 import views
urlpatterns = [path('login/', views.login, name="v1"),path('auth/', views.auth, name="v2"),
]

视图函数中反向生成URL

from django.urls import reverse
url = reverse("v2")   # /auth/
url = reverse("v1")   # /login/

HTML模版中反向生成

<a href="{% url 'v1' %}">添加</a>
<a href="{% url 'v2' %}">添加</a>

4.2 分组中方向解析URL

无名分组反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)# 前端解析
<a href="{% url 'home' 1 123 %}">点我看美女</a>
有名分组反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
res=reverse('home', kwargs={'year':123, 'mon':1}) # /v1/v2/v3/home/1
print(res)# 前端解析
<a href="{% url 'home' year=1 mon=123 %}">点我看美女</a>

5. 名称空间

避免name重复可将重名name分别放入不同的namespace

  • 主路由
    	from django.urls import path, re_path, include# 很多功能,很多URL
    urlpatterns = [path('api/', include("apps.api.urls",namespace='x1')),path('web/', include("apps.web.urls",namespace='x2')),	
    ]
    
  • api/urls.py
    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [path('login/', views.login,name="login"),path('auth/', views.auth, name='auth'),
    ]
    
  • web/urls.py
    from django.urls import path, re_path
    from . import views
    # 很多功能,很多URL
    urlpatterns = [path('home/', views.home,name='home'),path('order/', views.order,name='order'),path('auth/', views.order, name='auth'),
    ]
    

反向生成

from django.urls import reverse
url = reverse("x1:login")    # /api/login/
url = reverse("x1:order")    # /web/login/url = reverse("x1:auth")    # /api/login/
url = reverse("x2:auth")    # /web/login/
http://www.dinnco.com/news/14328.html

相关文章:

  • 电商网站开发的现状百度关键词购买
  • 如何做品牌宣传与推广关键词优化步骤简短
  • 企业网站建设重要性网站seo入门基础教程
  • 手机网站设计图百度自己的宣传广告
  • 小额贷款 网站模板百度推广登录首页官网
  • 用ssh做网站免费收录链接网
  • 石家庄市网站建设培训班宁波seo智能优化
  • 河北网站seo优化合肥优化营商环境
  • adobe cms 网站制作seo网站推广免费
  • 做二手网站赚钱不5000人朋友圈推广多少钱
  • 企业外贸网站建设品牌seo培训咨询
  • 苏州企业网站建站网站推广优化外包公司
  • 艾迪网络专业的网站建设公司系统优化的例子
  • 金融行业网站建设方案如何查询百度搜索关键词排名
  • 做ic销售的各种网站个人网页制作教程
  • 易语言做自动登陆网站单词优化和整站优化
  • 网站域名过户小程序推广方案
  • 番禺高端网站建设公司久久seo正规吗
  • 做网站品东莞网站建设优化技术
  • seo网站优化工具大全重庆网站优化软件
  • 重庆网站建设只选承越线下推广活动策划方案
  • 畅言 wordpress插件优化网址
  • 微店网站建设需要多少钱做网站的网络公司
  • 做购物网站实例代码最新时事热点
  • 滁州58同城网站怎么做希爱力副作用太强了
  • 自己做的网站如何放到微信网络推广关键词优化公司
  • 北京专业网站建设网站推广深圳网站建设资讯
  • 物流公司网站怎么做如何推广小程序平台
  • 做网站的不给源文件每天三分钟新闻天下事
  • 网站 工商备案百度导航如何设置公司地址