一、路由定义
URL与Django视图建立映射关系,根据用户请求的URL链接来判断对应的处理程序,并返回处理结果
二、使用步骤
1.路由使用
# path:用于普通路径,不需要自己手动添加正则首位限制符号,底层已添加
# 普通路径
path('index', views.index),
# from django.urls import re_path # 用re_path 需要引入
# re_path:用于正则路径,需自己手动添加正则首位限制符号
# 正则路由
re_path(r'^articles/([0-9]{4})/$', views.articles),
2.路由分发(include)
问题:多个app目录共用一个urls.py容易造成混淆,不便于维护
解决:使用路由分发(include),让每个app目录都单独拥有自己的urls
步骤:
1、在每个app目录里都创建一个urls.py文件
2、在项目名称目录下的urls文件里,统一将路径分发给各个app目录
在之前项目里面生成了一个Testmodel文件夹(创建命令django-admin startapp TestModel
),里面有个apps.py
from django.apps import AppConfig
class TestmodelConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'TestModel' #与文件夹名称一致
然后我们在settings.py里面注册一下,在INSTALLED_APPS 里面添加内容
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 确保这里的名称与 apps.py 中的 name 属性一致
]
在TestModel中新增一个urls.py
from django.urls import path,re_path # 导入 path 和 re_path
from . import views # 导入 views 模块
app_name = 'test' # 这里的 app_name 是用于 URL 命名空间
urlpatterns = [
# re_path(r'^login', views.index, ),
path('login', views.login, name='login'),# name="路由别名"。
]
TestModel中的views.py内容
from django.shortcuts import render
# Create your views here.
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
if username == 'admin' and password == 'password':
return render(request, 'login.html', {'res': 'Login Success'})
else:
return render(request, 'login.html', {'res': 'Invalid Username or Password'})
return render(request, 'login.html')
templates文件夹下新增login.html
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="">
#这里还可以使用路由别名 <form method="post" action="{% url 'test:login' %}">
{% csrf_token %}
<label for="username">Username:</label>
<input type="text" id="username" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
<p>{{res}}</p>
</body>
</html>
外层的urls.py内容如下
from django.contrib import admin
from django.urls import path
# 从 django.urls 引入 include
from django.urls import include, re_path, path
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', include('TestModel.urls')), # 包含 TestModel 应用的 URL 配置,在TestModel的urls.py中定义了app_name = 'test',使用方法 include("app名称:urls","app名称")
]
访问地址http://127.0.0.1:8000/test/login
,这里指定到了test下面的login
点击登录后的效果