- 一:URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
-
urlpatterns = [url(正则表达式, views视图函数,参数,别名),]
- 参数说明:
- 一个正则表达式字符串
- 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 可选的要传递给视图函数的默认参数(字典形式)
- 一个可选的name参数
-
1、参数1
- 可以使用正则表达式提取参数,传递给视图函数进行逻辑判断
- 1.1:无命名
-
#urls.py
re_path('mydata/([0-9]{4})/([0-9]{2})',views.myData), #视图函数需要传入两个形参接收这里()起来的内容,无命名
#views.py
def myData(req,y,m):
return HttpResponse("year"+ y+"month"+m)
- 1.2:有命名
#urls.py
re_path('mydata_name/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})',views.myData_name), #视图函数需要传入两个参接收这里正则提取的内容,有命名
#views.py
def myData_name(req,year,month):
return HttpResponse("year"+ year+"month"+month)
- 2、参数2,对应的views视图函数名称
- 3、参数3
- 必须传入键值对
#urls.py
re_path('mydata_name1/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})',views.myData_name1,{"name":"xwl"}),
#views.py
def myData_name1(req,year,month,name):
return HttpResponse("year"+ year+"month"+month+name)
- 4、参数4
- 别名,目的:后台修改路径,前端不需要逐个替换,使用别名即可
#urls.py
re_path('login',views.login,name="xwl"),
#views.py
def login(req):
if req.method == "POST":
username = req.POST.get("username")
pwd = req.POST.get("pwd")
if username == "xwl" and pwd == "123":
return HttpResponse("登录成功!!!")
return render(req,"login.html")
#templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{#<form action="/login" method="post">#}
<form action="{% url "xwl" %}" method="post">
{# 使用别名#}
<input type="text" name="username">
<input type="password" name="pwd">
<input type="submit" value="submit">
</form>
</body>
</html>
- 二:路由分发
- 试想一下,向京东这种大项目,网页有成千上万,我们在整个urls中逐一配置每个页面的话,可能有冲突、不方便管理。如是我们可以在不同的APP下新建urls.py,管理相应app的路由映射。在总的urls.py中分发即可
- 1、对应的APP下新建urls.py文件
- 2、注释掉mysite828/urls.py中的路由,拷贝到blog/urls.py文件中
- 3、mysite828/urls.py中路由分发
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
- 4、blog/urls.py配置即可
#mysite828/urls.py
from django.contrib import admin
from django.urls import path,re_path,include
from blog import views
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^blog/', include("blog.urls")),
]
#views.py
def include_ces(req):
return HttpResponse("include")
#blog/urls.py
from django.urls import path,re_path,include
from blog import views
urlpatterns = [
re_path('include/', views.include_ces),
]
标签:03,URLS,views,py,视图,django,urls,path,include
From: https://www.cnblogs.com/xwltest/p/16641113.html