Django路由

一、路由定义

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
在这里插入图片描述
点击登录后的效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值