编写URL规则

在每个App中设置独立的静态资源和模板文件,并添加一个空白的 urls.py,将属于App的URL都写入该文件夹,而项目根目录的urls.py是将每个App的urls.py统一管理。根目录的uels.py编写如下:

from django.contrib import admin    # 导入Admin功能模块
from django.urls import path, include  # 导入URL编写模块

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myApp.urls'))   # URL为空,代表为网站的域名,即127.0.0.1:8000,通常为网站的首页,include将该URL分发给myApp的urls.py
]

则在myApp中的urls.py编写如下:

from django.urls import path
from . import views             # 导入同一目录下的views.py
urlpatterns = [
    path('', views.index)
]

views.py 用于编写视图函数,处理URL请求信息并返回网页内容给客户。在 views.py 中编写 index 函数 如下:

from django.http import HttpResponse
    # Create your views here.
    # index函数必须设置参数request,该参数代表当前用户的请求对象,该对象包含用户名、请求内容和请求方式等信息。视图函数执行完成后必须使用return将处理结果返回。    
def index(request):
    return HttpResponse("Hello world")

在浏览器中打开 http://127.0.0.1:8000/ 运行结果如下:

java 编码 url请求 java中url编写规则_java 编码 url请求

带变量的URL

URL的变量类型有字符类型、整型、slug、uuid
在myApp的 urls.py 里添加带有字符类型、整型、slug、uuid的URL地址信息,编写如下:

from django.urls import path
from . import views    # 导入同一目录下的views.py
urlpatterns = [
    path('', views.index),
    path('<year>/<int:month>/<slug:day>', views.mydate)   # 变量符号<>设置变量,括号里面以冒号分为两部分,前面代表变量的数据类型,后面代表变量名,默认为字符类型
]

同时 views.py 里的函数如下:

from django.http import HttpResponse
# Create your views here.
# index函数必须设置参数request,该参数代表当前用户的请求对象,该对象包含用户名、请求内容和请求方式等信息。视图函数执行完成后必须使用return将处理结果返回。
def index(request):
    return HttpResponse("Hello world")
def mydate(request, year, month, day):
    return HttpResponse(str(year)+'/'+str(month)+'/'+str(day))

在浏览器中打开 http://127.0.0.1:8000/ 输入参数后运行结果如下:

java 编码 url请求 java中url编写规则_正则表达式_02


还可以使用正则表达式限制URL的可变范围,编写如下 :

from django.urls import path, re_path
from . import views    # 导入同一目录下的views.py
urlpatterns = [
    path('', views.index),
    # 变量符号<>设置变量,括号里面以冒号分为两部分,前面代表变量的数据类型,后面代表变量名,默认为字符类型
    # path('<year>/<int:month>/<slug:day>', views.mydate)  
    
    
    # 正则表达式的作用是对URL的变量进行截取和判断,以小括号表示,?P是固定格式,<>为变量的编写规则,[0-9]{2}是正则表达式的匹配模式,代表变量的长度为4,只允许取0-9的值
    re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)
    
]
注意:如果URL的末端使用正则表达式,在该URL的末端应加上斜杠或者其他字符,如 .html

java 编码 url请求 java中url编写规则_正则表达式_03

设置参数name

参数name的作用是对URL地址进行命名,然后在HTML模板中使用可以生成相应的URL信息。在URL中设置参数name,只要参数name的值不变,无论URL地址信息如何修改都无须修改模板中标签a的href属性值。
实现如下:
在myApp的 urls.py 中添加代码:

re_path('(?P<year>[0-9]{4}).html', views.myyear, name='myyear')

在myApp的 views.py 中添加代码:

from django.shortcuts import render

def myyear(request, year):
    return render(request, 'myyear.html')

在myApp的 templates模板文件夹 中添加 myyear.html ,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div><a href="/2019.html">2019 old Archive</a></div>
<div><a href="{%  url 'myyear' 2019 %}">2019 Archive</a></div>
</body>
</html>

执行流程:
用户访问该URL时,项目根据URL信息选择视图函数myyear处理,并将该URL命名为myyear。
视图函数myyear将模板myyear.html作为响应内容并生成相应的网页返回给用户。