Django路由中的url浅识
Django中路由的URL,基本写法是path(‘home/’,views.home,name=‘home’),path中的3个函数也就是3个部分
#### path('home/',views.home,name='home')
#### path('访问路径',视图函数,url命名)
1,访问路径: 访问视图函数的url路径,拿上述的代码举例,需要访问到views.home函数,假设目前运行服务器的地址是127.0.0.1:8888,那在浏览器中输入127.0.0.1:8888/home/就可以访问到
# App/urls.py 应用的路由文件
from django.urls import path
from App import views
# 应用中的路由界面,注意urlpatterns不能修改,因为需要跟项目中的根路由保持名称的一致才能正常添加
urlpatterns = [
# 第一个参数是访问的路径,不能以/开头,第二个返回的视图函数,第三个是名称,项目中重定向使用
path('home/',views.home,name='home'),
]
2,视图函数: 就是这个url路径访问到函数,函数中使用Django的HttpResponse对象返回的数据,就会在界面中呈现
# App/views.py 应用的视图函数文件
from django.http import HttpResponse
def home(request):
return HttpResponse('This is home page')
记得要映射到Django项目中的url去,否则无法访问
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# 这个位置讲应用中的子路由添加到项目的根路由当中
path('',include('App.urls'))
]
3,url命名: 这个相当于给这个url添加了一个别名,也就是标识,方便项目有使用到重定向到url的地方,在之后做修改的时候,不需要修改代码中的业务代码
#假设项目中有两个视图函数,一个是首页,一个是登录页,在访问首页时,如果没有携带参数,则跳转到登录页
# App/views.py
from django.shortcuts import render,redirect
from django.http import HttpResponse
# 主页的视图函数
def index(request):
user_name = False
try:
user_name = request.GET.get('user_name')
except BaseException as e:
print(e)
if user_name:
return HttpResponse('这是首页')
else:
return redirect('login/')
# 登录页的视图函数
def login(request):
return HttpResponse('这个登录页')
路由文件是这么写的
# App/urls.py
from django.urls import path
from App import views
# 应用中的路由界面,注意urlpatterns不能修改,因为需要跟项目中的根路由保持名称的一致才能正常添加
urlpatterns = [
# 无路径默认的情况下,去访问index这个首页
path('', views.index),
# 使用url命名,来给这个path一个标识,方便项目中使用,name就是url的命名,也就是别名
path('login/',views.login,name='login')
]
上面的写法是没有问题的,但是如果有一天login的访问路径名称要改变,改为signup,那按照上面redirect的填写访问路径的写法,项目中如果有很多地方都这么写,那就全部都需要修改,这个时候如果使用的url命名的方式就不需要修改,只需要将上面的 App/views.py文件修改一下即可
# 使用reverse进行名称反转,获取到真正的访问路径,这样无论路径如何修改,业务代码都不需要修改
# App/views.py
from django.shortcuts import render,redirect
from django.http import HttpResponse
# 主页的视图函数
def index(request):
user_name = False
try:
user_name = request.GET.get('user_name')
except BaseException as e:
print(e)
if user_name:
return HttpResponse('这是首页')
else:
# return redirect('login/')
# 修改成下面这个即可,reverse中的参数就是url中name的名称.
return redirect(reverse('login'))
# 登录页的视图函数
def login(request):
return HttpResponse('这个登录页')