首页 > 其他分享 >django无名分组和反向解析

django无名分组和反向解析

时间:2022-12-12 22:35:01浏览次数:57  
标签:info views 无名 分组 user home path login django

django请求生命周期流程图

当客户端浏览器访问django后端时django框架中发生了哪些事情呢?

客户端请求服务端时将客户端请求的各种数据和信息进行整理。应用程序则负责具体的逻辑处理。

1.用户在浏览器输入url 发送一个get方法的request请求

2.django中封装了socket的wsgi服务器,监听端口接收request请求

3.初步封装后传入中间件,中间件处理后再传入路由分发 匹配对应视图函数

4.再将request请求传输到views中的视图函数进行业务逻辑处理

5.再调用modles中表对象,通过orm拿到数据库的数据

6.然后对templates中对应的模版进行渲染,封装模版再次传入中间件

7.中间键处理完成后再通过wsgi再进行封装处理,响应给浏览器展示Snipaste_2022-12-12_11-30-09

django路由层

1.路由匹配

urls.文件中:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', user_info.views.login),
    path('home/', user_info.views.home),
    path('register/', user_info.views.register),
]

django2.x及以上 path 第一个参数写什么就匹配什么
django1.x第一个参数使用的是正则表达式
无论什么版本 用户访问django项目时都会自带在url后加/后缀的功能
配置文件中 写入 APPEND_SLASH = False  可以手动取消 但不建议

2.正则匹配

urls.文件中:

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^$',user_info.views.home)
    # 首页正则
    re_path('^login/', user_info.views.login),
]

re_path后面可以直接跟正则表达式 可以用用户输入的路由中进行匹配,只要匹配到了 就会停止对其他 会立即执行对应的视图函数

django老版本中是 url() 新版本是 re_path()

3.无名分组与有名分组

urls.文件中:

urlpatterns = [
    re_path('^$',user_info.views.home)
    re_path('^login/', user_info.views.login),
    re_path('^test/(\d+)/', user_info.views.login),
    
]
def login(request,test):
  print(test)
  
# 正则匹配会将括号内匹配到的内容,当作位置参数传递给后面的视图函数




有名分组

urlpatterns = [
    re_path('^$',user_info.views.home)
    re_path('^login/', user_info.views.login),
 re_path('^test/(?P<id>\d+)/', user_info.views.login),
    
]
def login(request,id):
  print(id)
  
可以给正则命名 (?P<别名>正则表达式) 
这样正则表达式匹配到的数字会被当作关键字传参 传给视图函数


无名分组和有名参数不可以混合使用

但是可以同时使用多个

urlpatterns = [
 re_path('^test/(?P<id>\d+)/(?P<num>\d{4})', 
         user_info.views.login),
    		 
]

4.转换器

urls.文件中:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', user_info.views.login),
    path('home/<str:info>', user_info.views.home),
    path('register/<int:id>', user_info.views.register),
]

<str:info>  匹配除路径分隔符外的任何字符
<int:id>    匹配任意正整数
<slug:num>  匹配任意一个由字母或数字组成的字符串

<uuid:uuid> 匹配格式化后的uuid
<path:url>  匹配完整的url

def login(request,info):
  print(info)
  
home(实参request对象,info='转换器匹配到的数据')
register(request,id='转换器匹配到的数据')

无名反向解析

path('login/', user_info.views.login),
  
通过一些方法得到一个结果 该结果可以直接访问对应的url触发视图函数

我们要实现 url 动态获取


path('login/', user_info.views.login,name='log'),

第一步:先给路由和视图起别名

1.前端反向解析
   {% url 别名%}
  <a href:"{% url 'log'%}">111</a>
  
  通过别名绑定 这样无论怎么更改 别名不变都可以实现对应视图函数
  
  
 2.后端反向解析
 from django.shortcuts imput render,reverse
  def login(request):
    reverse('别名')
  就可以拿到路由的名字 

有名无名分组反向解析


urls.文件中:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', user_info.views.login),
    path('home/(\d+)', user_info.views.home,nmae='xxx'),
    # 无名分组的反向解析
    path('^login$',user_info.views.login)
]

前端 
{% url 'xxx' 123 %}
# 输入别名 然后需要传一个符合分组正则的数据 

def home(request,args):
   reverse('xxx',args=(123,))
   # 输入别名 然后需要传一个符合分组正则的数据
   return render(request,'login.html')

这个数字一般情况放的是数据的主键值 利用主键值来编辑数据 

设置一个无名分组的路径 起好别名




当需要跳转这个路径的时候,可以使用
 <a href="{% url 'update' user.id %}" class="btn btn-primary">编辑</a>
跳转到别名为 update 页面 并路由对应函数传参user.views.update(id)




有名分组反向解析

path('home/(?P<别名>\d+)',user.views.func,name='xxx'),

前端语法:{% url 'xxx' 123 %}

def home(request):
reverse('xxx',args=(123,))



代码说明

urlpatterns = [    path('add/', user.views.add_user),

    re_path('delete/(\d+)', user.views.delete,name='delete'),
    #设置一个无名分组  deletes视图函数可以接受传参(\d+) 起别名为 'delete'
    re_path('update/(\d+)',user.views.update,name='update'),
  
    re_path('^$', user.views.home,name='home'),   ]



<a href="{% url 'update' user.id %}" class="btn btn-primary">编辑</a>
<a href="{% url 'delete' user.id %}" class="btn btn-danger a1">删除</a>
# 跳转到路由别名为 delete的页面  触发对应函数 传参为 user.id


{% url 'update' user.id %}
跳转到别名为 update 页面 并传参 user.views.update(id)

{% url 'xxx' 123 %}
# 输入别名 然后需要传一个符合分组正则的数据 

直接通过 反向解析跳转页面并传递参数 

标签:info,views,无名,分组,user,home,path,login,django
From: https://www.cnblogs.com/moongodnnn/p/16977294.html

相关文章

  • Django-路由层、反向解析
    1.Django请求生命周期流程图1.路由层、视图层、模板层、模型层、组件、BBS项目2.django路由层1.路由匹配:'''当我们输入一个地址时,接口后面的/不用输入,也可以自动跳......
  • djiango路由匹配、djiango路由层、反向解析、有名无名反向解析
    djiango路由匹配、djiango路由层、反向解析、有名无名反向解析一、作业讲解(数据的增删改查)urls代码fromdjango.contribimportadminfromdjango.urlsimportpath......
  • django_应用及分布式路由
    一、应用的定义1、应用在Django中是一个独立的业务模块,可以包含自己的路由、视图、模板、模型。例如如下图所示,一个资讯类网站中会有不同的模块,如果所有的模......
  • Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正
    今日内容详细可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义__str__方法可以在数据对象被执行打印操作的时候方......
  • django框架(部分讲解)
    可视化界面之数据增删改查小知识点:针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查......
  • django之路由层
    django之路由层目录django之路由层可视化界面之数据增删改查django请求生命周期流程图django路由层反向解析可视化界面之数据增删改查数据对象主键字段的获取可以使用更......
  • django后端之路由层
    目录数据增删改查django请求生命周期流程图(*****)django路由层1.路由匹配2.正则匹配3.转换器4.正则匹配的无名有名分组反向解析基本使用动态路由的反向解析数据增删改查......
  • ORM增删改查 django请求生命周期图 django路由层及反向解析
    目录可视化界面之数据增删改查1.建表2.数据展示功能3.数据添加功能4.数据编辑功能5.数据删除功能django请求生命周期流程图django路由层1.路由匹配2.转换器功能path3.正则......
  • python之路47 django路由配置
    可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看'''form......
  • django之路由层
    django之路由层路由层,主要是路由地址与视图函数的映射关系,如果将网站比作一本书,那么路由就相当于这本书的目录。路由匹配在目前的主流版本2.x及以上版本中,我们默认......