【django学习-04】URLS(路由系统)

  • 一: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),

]
posted @ 2022-08-30 22:22  Tony_xiao  阅读(83)  评论(0编辑  收藏  举报