• Django 路由配置(二)


    一、路由

           就是根据用户请求的URL链接来判断对应的出来程序,并返回处理结果,也是就是URL和django的视图建立映射关系.

    二、Django请求页面的步骤

      1、首先Django确定要使用的根URLconf模块,通过ROOT_URLCONF来设置,在settings.py配置文件中。但是如果传入 HttpRequest对象具有urlconf 属性(由中间件设置),则其值将用于替换ROOT_URLCONF设置

       

    2、 Django加载该Python模块并查找该变量 urlpatterns。它是django.urls.path()和(或)django.urls.re_path()实例的序列(sequence)。urlpatterns表示路由模型,通过路由模型寻找里面具体的地址

    3、Django按顺序运行每个URL模式,并在匹配所请求的URL的第一个URL中停止。

    4、一旦正则表达式匹配,Django将导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。该视图会获得如下参数:

    • 一个HttpRequest实例。
    • 如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。
    • 关键字参数由正则表达式匹配的任何命名组组成,由可选kwargs参数中指定的任何参数覆盖。django.urls.path\(\)django.urls.re_path\(\)

    5、如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图

     

    三、urls中path参数说明

    https://docs.djangoproject.com/en/4.2/topics/http/urls/

     (1)系统已经配置好一个路由,这个路由访问就是django自带的后端管理系统

     启动项目  python manage.py runserver

    通过地址加路由的admin去访问http://127.0.0.1:8000/admin/login/?next=/admin/

     (2) 设置自己的页面路由

       2.1  编写视图函数

    1. from django.http import HttpResponse
    2. from django.shortcuts import render
    3. # Create your views here.
    4. # 视图函数
    5. def info(request):
    6. #响应数据
    7. return HttpResponse('HelloWorld~~~~')

    2.2 在urls中配置路径

    1. from django.contrib import admin
    2. from django.urls import path,include #导包include
    3. from user.views import info, mains
    4. #主路由urls
    5. urlpatterns = [
    6. #(1) 直接访问路径
    7. path('info/', info),
    8. path('admin/', admin.site.urls),
    9. ]

    2.3  启动,访问http://127.0.0.1:8000/info/

     

    四、路由分发  

      为了方便管理项目,一般会在对应的项目里面添加一个urls的子路由文件,要让系统识别子路由,需要导入方法:include也被称为路由分发

     

    原因: django项目中多个app目录共用一个url容易造成混淆,后期维护也不方便

    解决:使用路由分发,让每个app目录都单独拥有自己的urls

    步骤:

    1.在每个app目录都创建一个urls.py的文件(拷贝主路由urls.py进行修改!)

    2.在视图veiws.py文件编写视图函数

    1. from django.http import HttpResponse
    2. from django.shortcuts import render
    3. # Create your views here.
    4. # 视图函数
    5. def info(request):
    6. #响应数据
    7. return HttpResponse('HelloWorld~~~~')
    8. def mains(request):
    9. #数据
    10. dd={'name':'麦克'}
    11. return render(request,'home.html',dd)
    12. def show(request):
    13. #数据
    14. data={'name':'mike','age':18}
    15. #返回模板视图
    16. return render(request,'show.html',{'data':data})

    3.在urls导入app目录下的views.py文件 

    1. from django.urls import path
    2. #导入视图
    3. from user.views import info,mains,show
    4. #如果shows页面可能有多个,那么需要用到命名空间。
    5. # app_name="user"
    6. #子路由urls
    7. urlpatterns = [
    8. #path(路由访问路径,视图名称)
    9. path('info/', info),
    10. path('mains/', mains),
    11. path('show/', show),
    12. # path(路由访问路径,视图名称,别名)
    13. path('show/', show,name='shows'),
    14. ]

     4. 模板页面 home.html

    1. "en">
    2. "UTF-8">
    3. 渲染视图
    4. 欢迎您"color:royalblue">【{{ name }}】 来到!!

    5. {# 使用别名来替代硬编码 #}
    6. {# 使用命名空间+别名来替代硬编码 #}

    show.html

    1. "en">
    2. "UTF-8">
    3. 渲染视图
    4. hello ! {{ data }}

     5.在主路由配置子路由

    1. from django.contrib import admin
    2. from django.urls import path,include #导包include
    3. from user.views import info, mains
    4. #主路由urls
    5. urlpatterns = [
    6. #(1) 直接访问路径
    7. path('info/', info),
    8. # path('mains/', mains),
    9. path('admin/', admin.site.urls),
    10. #(2)使用子路由来访问
    11. #一个应用对应一个子路由
    12. path('user/',include('user.urls'))
    13. ]

    6.启动项目:http://127.0.0.1:8000/

     http://127.0.0.1:8000/user/mains/

    点击第二页 或  单击使用别名

    五、问题:如果shows页面可能有多个,那么需要用到命名空间。

    (1)在子路由,进行定义命名空间 

    (2)在home.html页面中使用

    使用命名空间+别名
    

    (3) 访问:http://127.0.0.1:8000/user/mains/ 

     

    单击超链接

     

     

     

  • 相关阅读:
    CSS色域、色彩空间、CSS Color 4新标准
    2023软件测试面试避坑指南
    常用的命名规范/命名规则
    「SpringCloud」09 Bus消息总线
    Arouter源码系列之拦截器原理详解
    第三篇:字符串的有效长度JavaScript
    IDEA类和方法注释模板设置
    JS中的执行上下文和执行栈
    Python-正则表达式使用
    大数据之Hadoop集群搭建(4个节点)
  • 原文地址:https://blog.csdn.net/hlx20080808/article/details/134504451