标签:匹配 用户名 基本 属性 rev special 搜索 过程 lse
URL配置(conf)就像是Django所支撑的网站的目录;
本质就是:URL与调用该URL执行的视图函数的映射表;
通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码.
path :不能使用正则 ,path(‘路径‘,views.方法) re_path :可以使用正则 ,re_path(r‘正则表达式路径‘,views.方法)
from django.urls import path,re_path from app01 import views #必须导入views urlpatterns = [ re_path(r‘^articles/2003/$‘, views.special_case_2003), ]
re_path(r‘^articles/([0-9]{4})/$‘, views.year_archive)
#传送给views时会携带小括号的数值,故需要相应的形参接受
re_path(r‘/articles/$‘, views.year_archive) #错误写法
‘‘‘ url配置: re_path(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), 对应url请求时候的传值过程 /articles/2005/03/ 请求将匹配列表中的第三个模式。
Django 将调用函数views.month_archive(request, ‘2005‘, ‘03‘)。 ‘‘‘
path(‘index/(? P<year> \d{4})‘,views.year) 对应views中 def year(request,year): return HttpResponse(year)
/articles/2003/03/03/
请求将调用函数views.article_detail(request, year=‘2003‘, month=‘03‘, day=‘03‘)。
ULR解耦合。把每一个应用的视图函数放入自己的文件中,全局的urls只需要分配该路径属于某一个应用的视图函数。这样解决如果有一个程序出了问题不会影响到其他的应用的执行。
urlpatterns = [ re_path(r‘^admin/‘, admin.site.urls), re_path(r‘^app01/‘, include(‘app01.urls‘)), ] 之后app01中的urls,再对匹配成功的url进行分发
在模板中:使用url 模板标签。
{% url ‘别名‘ %}
在Python 代码中:使用from django.urls import reverse()函数
rev_url=reverse(‘别名‘)
项目.urls.py 设置别名 name=‘Index‘
from django.contrib import admin from django.urls import path,re_path from app01 import views urlpatterns = [ path(‘admin/‘, admin.site.urls), path(‘index/‘,views.index,name=‘Index‘), path(‘login/‘, views.login) ]
app01.views.py中 导入 inverse
from django.shortcuts import render,HttpResponse,redirect from django.urls import reverse #导入方向解析函数 # Create your views here. def index(request): return render(request,‘index.html‘) def login(request): print(request.method) if request.method==‘GET‘: return render(request,‘login.html‘) else: re_path=reverse(‘Index‘) #反向解析 return redirect(request,re_path)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="{% url ‘Log‘ %}" method="post"> {% csrf_token %} 用户名 <input type="text" name="user"> 密码 <input type="text" name="pwd"> <input type="submit"> </form> </body> </html>
4 反向解析解析过程分析
根据别名,在urlpatterns中找到对应的路径并返回
命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回.
我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间。
urlpatterns = [ re_path(r‘^admin/‘, admin.site.urls), re_path(r‘^app01/‘, include("app01.urls",namespace="app01")), re_path(r‘^app02/‘, include("app02.urls",namespace="app02")), ]
urlpatterns = [ re_path(r‘^index/‘, index,name="index"), ]
urlpatterns = [ re_path(r‘^index/‘, index,name="index"), ]
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app01:index"))
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app02:index"))
标签:匹配 用户名 基本 属性 rev special 搜索 过程 lse
原文地址:https://www.cnblogs.com/angle6-liu/p/10216728.html