一、配置全局路由
在应用下,定义视图函数views.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def get_order(request):
return HttpResponse("orders应用下的路由")
在项目的urls路由配置中,映射该方法
from django.contrib import admin
from django.urls import path
from orders import views
urlpatterns = [
path('admin/', admin.site.urls),
path('getorder/',views.get_order)
]
二、项目有多个应用,配置子应用路由
当我们有多个应用时,会涉及到好多路由配置。如果所有的路由配置都在项目的全局urls文件中配置,数据有很多,也很杂,不利于后期维护。
好的办法就是在每个子应用下,创建一套子应用的路由。
1、在当前项目下,创建两个应用orders 、 projects
分别在两个子应用下,创建urls文件。每个应用,各个创建两条路由。写当前应用的路由信息。
orders 应用:
视图函数orders/views.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def get_order(request):
return HttpResponse("获取订单信息")
def delete_order(request):
return HttpResponse("删除订单信息")
配置orders应用的路由文件orders/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('get/',views.get_order),
path('delete/',views.delete_order),
]
注意格式:
1、方法调用后面,没有括号
projects 应用:
视图函数projects/views.py
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def get_project(request):
return HttpResponse("获取项目信息")
def delete_project(request):
return HttpResponse("删除项目信息")
子应用下的路由配置projects/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('get/',views.get_project),
path('delete/',views.delete_project),
]
配置全局路由
在全局路由下miaostudydjango/urls.py,引入两个子应用的路由。urls
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 映射 projects 子应用的路由
path('projects/',include('projects.urls')),
# 映射 orders 子应用的路由
path('orders/',include('orders.urls')),
]
注意格式:
1、path('orders/',include('orders.urls')),
‘orders/’ ,为路由,开头没有斜杠,结尾必须以/斜杠结尾
include('orders.urls') 映射到子应用的urls文件。 注意'orders.urls' 一定要有单引号包裹。
访问url连接:
访问orders应用下的路由
http://127.0.0.1:8000/orders/get/
http://127.0.0.1:8000/orders/delete/
访问projects应用下的路由
http://127.0.0.1:8000/projects/get/
http://127.0.0.1:8000/projects/delete/
在访问子应用的视图函数时,url分为了两节。第一节是全局路由的地址
第二节,是子应用的路由地址。
三、动态路由(Resful风格接口)
http://127.0.0.1:8000/orders/get_goods_info/1/
商品:1的信息是xx
http://127.0.0.1:8000/orders/get_goods_info/5/
商品:5的信息是xx
实现功能:
url请求中,存在一个动态的值。如上面两个请求。
1、urls配置
from django.urls import path
from . import views
urlpatterns = [
path('get/',views.get_order),
path('delete/',views.delete_order),
path('get_goods_info/<int:goods_id>/',views.get_goods_info),
]
使用<>来包含用户输入的动态值
goods_id(自定义变量)用户输入的变量
int: 指定变量的类型
注意:<int:goods_id> 中不要有空格,否则会报错
2、视图函数
def get_goods_info(request,goods_id):
return HttpResponse(f"商品:{goods_id}的信息是xx")
f""中可以直接使用变量(一种写法,替代.format())
3.1 类型转换器
如上面的 <int:goods_id> ,int: 为类型转换器
格式:
<格式转化器:参数名称>
默认的类型转化器: int 、str 、slug 、uuid
url路由中的参数,在调用视图函数时,会自动传给视图函数。
四、正则路由
路由正则使用re_path()
from django.urls import path, re_path
re_path()
举例:
要求路由为
/project_info/三位字符/
1、视图函数
def project_info(request,project_id):
return HttpResponse(f"项目id:{project_id}的信息介绍")
2、urls路由,正则表达式
from django.urls import path, re_path
from . import views
urlpatterns = [
path('get/',views.get_project),
path('delete/',views.delete_project),
re_path(r'^project_info/(?P<project_id>\w{3})/$',views.project_info)
]
注意:
1、正则使用re_path
2、正则必须以^开头,$结尾
3、括号中,写正则表达式 (?P<project_id>\w{3})
4、?P<project_id> 指定变量名称
访问链接:
http://127.0.0.1:8000/projects/project_info/123/
返回值:
项目id:123的信息介绍
访问不符合正则要求的4位数字链接:
http://127.0.0.1:8000/projects/project_info/1234/
接口404