0
点赞
收藏
分享

微信扫一扫

基于nodejs+vue的Spark的共享单车数据存储系统的设计与实现python-flask-django-php

穆风1818 03-27 11:30 阅读 1

Router介绍

路由匹配

# 使用ur1给视图函数传参数
    path('index/',index)
    path('detail/<int:id>/',detail)
# 给ur1取别名,那么在使用此ur1的地方可以使用别名。比如:
    path('index/',index,name='index')
    path('detail/<int:id>/',detail,name='detail')

命名空间

# 在根路由中可以设置命名空间
	path('app/',include(('App.urls',"App"),namespace='App'))

反向解析

# 在视图函数中,反向解析ur1:
    from django.shortcuts import render,redirect,reverse
    def buy(request):
        return redirect(reverse('index'))
        return redirect(reverse('detail',args=[2]))
        return redirect(reverse('detail',kwargs={"id":2}))

#在templates中,使用别名:
    {%url 'detail' stu.id %}

# 使用命名空间:
# 指定命令空间后,使用反向解析时需要加上命名空间,比如:
#   1.在视图函数中:
        return redirect(reverse('App:index'))
# 2.在templates中:
        {% ur1 'App:index' %}

路由使用

创建名App的应用
App/models.py

from django.db import models

# Create your models here.
class UserModels(models.Model):
    name=models.CharField(max_length=30)
    age=models.PositiveIntegerField() # 非负数

App/urls.py

from django.urls import path
from App.views import *

urlpatterns=[
    # 首页
    path('index/',index)
]

urls.py

from django.contrib import admin
from django.urls import path,include
from App.views import *

urlpatterns = [
    # 1、直接使用根路由
    path('user/',index),

    # 2、使用子路由,使用include
    path('user/',include('App.urls')),

    # 3、使用子路由,使用include,命名空间namespace
    # 使用命名空间时注意,include函数有两个参数,默认第二个参数namespace为None
    # 当传命名空间的时候,第一个参数要是元组类型的,并且要加上App的名字,一般和应用的名字一样
    path('user/',include(('App.urls','App'),namespace='App')),
    path('admin/', admin.site.urls),
]

页面跳转

  • 当路由规则使用了命名空间,反向解析也只能使用带命名空间的方式
    创建userlist.html,使用index.html进行后端跳转
    index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <h2>首页</h2>
    <hr>
    {#  1、URL路径  #}
    {#  当访问这个路径/user/userlist 相当于会访问后端的视图函数userlist(),来到urls.py文件对userlist的路由规则  #}
    <a href="/user/userlist">url路由的方式:进入用户列表页面</a>

    <hr>
    {#  2、反向解析  #}
    {#  userlist 是path路由的name值  #}
    <a href="{% url 'userlist' %}">反向解析的方式:进入用户列表页面</a>
    <hr>

    {#  反向解析:带命名空间  #}
    <a href="{% url 'App:userlist' %}">反向解析带命名空间的方式:进入用户列表页面</a>
</body>
</html>

views.py添加

# 用户列表
def usr_list(request):
    users=UserModels.objects.all()
    return render(request,'user_list.html',{'users':users})

1711462183069.png

路由传参

单个参数

创建userdetail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户详情</title>
</head>
<body>
    <h2>用户详情</h2>
    <hr>
    用户姓名:{{ user.name }}
    <hr>
    用户年龄:{{ user.age }}
</body>
</html>

修改user_list.html

  • <a href="{% url 'userdetail' user.id %}">通过用户id拼接从而,当通过反向解析跳转到path匹配路径时,会将user.id 传入路由
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <h2>用户列表</h2>
    <hr>
    <ul>
        {% for user in users %}
            <li> 
                <a href="{% url 'userdetail' user.id %}">
                    {{ user.name }}-{{ user.age }}
                </a>
            </li>
        {% endfor %}

    </ul>
</body>
</html>

views.py添加

# 用户详情
def user_detail(request,uid):
    print('uid:',uid)
    # 通过主键获取一个对象的值
    user=UserModels.objects.get(pk=uid) # pk: primary key 主键
    return render(request,'userdetail.html',{'user':user})

usrls.py

from django.urls import path
from App.views import *

urlpatterns=[
    # 首页
    path('index/',index),
    # 用户列表
    path('userlist/',usr_list,name='userlist'),
    # 用户详情
    path('userdetail/<int:uid>/',user_detail,name='userdetail'),
]

1711462230195.png

多个参数

  • 要和路由中的参数名一致,名字对应赋值,理解为关键字传值
    views.py添加
# 多个参数
def user_ab_viem(request,a,b):
    return HttpResponse(f'a:{a}-b:{b}')
# 要和路由中的参数名一致,名字对应赋值
def user_ba_viem(request,b,a):
    return HttpResponse(f'a:{a}-b:{b}')

urls.py

from django.urls import path
from App.views import *

urlpatterns=[
    # 首页
    path('index/',index),
    path('userlist/',usr_list,name='userlist'),
    path('userdetail/<int:uid>/',user_detail,name='userdetail'),
    path('userab/<int:a>/<int:b>/',user_ab_viem,name='userab'),
    path('userba/<int:a>/<int:b>/',user_ab_viem,name='userba'),
]

1711461604942.png
1711461590780.png

举报

相关推荐

0 条评论