首页 > 其他分享 >Django基础 - 09路由URL控制与解析

Django基础 - 09路由URL控制与解析

时间:2023-04-16 20:58:33浏览次数:36  
标签:views URL 09 list Django url path list2 order

 

一、 URL路由配置

1.1  主路由: 主程序目录下的urls.py; 对应属性ROOT_URLCONF

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', index),
    # 配置子路由
    # include() 导入mainapp模块下urls.py中声明的所有子路由
    path('user/', include('mainapp.urls')),
    path('order/', include('orderapp.urls', namespace='orderapp')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

  

1.2 子路由: app模块目录下的urls.py

from mainapp.views import user_list, user_list2, user_list3

urlpatterns = [
    path('user', user_list),
    path('user2', user_list2, name=None),
]

  

二、 URL配置正则匹配

2.1 精准匹配

url() 是 兼容Django1.x版本的配置;  path() 是 Django2 之后的路由函数

    path('list', views.order_list),
    url(r'^list2$', views.order_list),

2.2  url 模糊匹配

    url(r'^list2/(\w+)$',views.order_list),

访问 http://127.0.0.1:8000/order/list2/asa121

def order_list(request, order_no):
    print("order_no: ", order_no)
    return render(request, 'list_order.html', locals())

2.3  url()通过正则在URL路径中向View函数传参

    url(r'^list2/(?P<city_code>\w+)/(?P<order_no>\d+)$', views.order_list),

def order_list(request, order_no, city_code):
    print("order_no: ", order_no, ", city_code: ", city_code)
    return render(request, 'list_order.html', locals())

2.4  Django2 的 path路径匹配

访问 http://127.0.0.1:8000/order/list2/qd/121

url(r'^list2/(?P<city_code>\w+)/(?P<order_no>\d+)$', views.order_list)
path('list2/<city_code>/<order_no>', views.order_list)

2.5 Django2 的 path 中使用类型转换器进行类型匹配

格式: <类型:参数名>

类型转换器: str:非空字符串 / int:0或一个正数 / slug: 任意ASCII字符 / uuid:UUID格式字符串

访问 http://127.0.0.1:8000/order/cancel/7ce31b33-c079-4d1a-b826-418803bac390

    path('cancel/<uuid:order_no>', views.cancel_order) 

>>> import uuid
>>> print(uuid.uuid4())
7ce31b33-c079-4d1a-b826-418803bac390

2.6 复杂路由规则匹配re_path

re_path(r'^search/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$')

    re_path('search/(?P<phone>1[3-57-9][\d]{9})$', views.search, name='search'),

def search(request, phone):
    return HttpResponse('hi, phone: %s' % phone)

 

 

三、反向解析

include的 namespace 和 path的 name 都在反向解析中使用, 使用 'namespace.name' 反向获取url路径

# 主路由
    path('order/', include('orderapp.urls', namespace='orderapp')),
# 子路由
# 不指定app_name报错Specifying a namespace in include() without providing an app_name is not supported. app_name = 'orderapp' path('list2/<city_code>/<order_no>', views.order_list, name='list'),

3.1 在页面中获取路径

{% extends 'base.html' %}

{% block content %}
    <h3>我的订单</h3>
    <p>   # 以下三种方式都正确, 位置传参(空格分隔)、 关键字传参
{#        <a href="/order/list/xa/1001">订单</a>#}
{#        <a href="{% url 'orderapp:list' city_code='xa' order_no=1001 %}">订单</a>#}
        <a href="{% url 'orderapp:list' 'xa' 1001 %}">订单</a>
    </p>
{% endblock %}

 

点击订单后, 页面跳转到 /order/list2/xa/1001 页面 

 

3.2 在视图函数中获取路径

在视图函数中,使用reverse()函数来反向获取url请求路径,再通过redirect或HttpResponseRedirect()重定向。

reverse() 使用args位置传参, 使用kwargs 字典类型进行传参; redirect返回的就是HttpResponseRedirect。

def query(request):
    from django.urls import reverse
    url = reverse('orderapp:search', args=('15799991111',))
    # return HttpResponse('Hi, Query %s' % url)
    # return redirect(url)

    url2 = reverse(viewname='orderapp:list', kwargs=dict(city_code='bj', order_no=2931))
    # return redirect(url2)
    # return HttpResponseRedirect(url2)

    url3 = reverse('orderapp:list', kwargs=dict(order_no=1211))
    # return HttpResponseRedirect(url3)
    return redirect(url3) 

 

访问 /order/query

 

四、自定义错误视图

4.1 定义错误页面404.html

关闭Django DEBUG模式 DEBUG = False

{% extends 'base.html' %}
{% block content %}
    <h3 style="color: red;">
        Sorry, 请求的资源 {{ request_path }} 不存在!
        <script>
            document.write(window.location.href)
        </script>
    </h3>
    <p>
        3秒之后自动跳转到<a href="/">主页</a>
    </p>
{% endblock %}

  

 

   

标签:views,URL,09,list,Django,url,path,list2,order
From: https://www.cnblogs.com/kingdomer/p/17298358.html

相关文章

  • Django基础 - 10请求与响应
     环境准备#1.开启一个新的项目advanceDjango(venv)E:\PythonLearn\djangoDemo>django-adminstartprojectadvanceDjango#2.配置项目同名APP下的settings.py,advanceDjango/advanceDjango/settings.pyALLOWED_HOSTS=['*']TEMPLATES=['DIRS�......
  • Django基础 - 06Model模型的关联关系及对象继承
     一、 一对一关系:实名认证表一对一关系: models.OneToOneField主表的数据是相对重要的(UserEntity), 从表需要主动声明关系(RealProfile)对象获取: 从表获取主表数据, 直接使用字段, 对象.字段名.属性名; 主表获取从表数据: 隐性的, 对象.模型名.属性名1.1 声明一对一......
  • django保存图片并返回url
    场景描述前端传递一个表单,表单中有title,description,以及image等信息,image在这里传递的是二进制文件后端需要将这些数据保存到一个数据库中。image需要保存到指定文件夹下,并且数据库中保存的是image的路径,之后我们可以通过浏览器访问类似127.0.0.1:8000/xxx/a.jpg访问到这......
  • P1074 [NOIP2009 提高组] 靶形数独
    题目传送门思路就是一个填数独的小游戏不会填数独的先去自己玩几把众所周知,数独每一行、每一列、每一个3*3宫格内的数字均含1~9,且不重复所以我们设三个数组r[10][10],c[10][10],block[10][10]分别记录行、列、3*3宫格内数字的使用情况重点:剪枝我们知道,数独的玩法是先从已知......
  • Django框架基础3
      本节主要分为两个内容:Django模板加载与响应模板精讲(模板变量、模板标签、判断逻辑(if和for))一、Django模板加载与响应  Django的模板系统将Python代码与HTML代码解耦,动态地生成HTML页面。Django项目可以配置一个或多个模板引擎,但是通常使用Django的模板系统......
  • 中小型软件企业初始管理记录20140922
    对于人数少于100人的中小型软件企业,员工的初始积极性是最重要的,企业应该考虑做到以下几点:1、薪资可以不高,但企业承诺一定要做到;2、通信费交通费必须考虑合理报销,报销过程要简单;3、加班餐费必须解决好;4、频繁加班后,需要考虑一定形式的团队建设,而且越快越好;5、员工的倒休要鼓励,不能让......
  • url跳转漏洞
    1、定义url跳转是指的攻击者可以构造payload,使受害者用户在访问目标网站的时候,跳转到攻击者控制的站点,从而进行钓鱼活动。2、发生场景(1)攻击者提前将payload保存到服务端的数据库,或者上传包含某跳转的页面,或者篡改已知页面包含跳转。这些情况有可能,但是一般意义不大。(2)请......
  • how to use cURL with a variable in the URL string All In One
    howtousecURLwithavariableintheURLstringAllInOne如何在cURL的URL字符串中使用变量系统变量环境变量shell变量#cURL字符串中如何使用shell系统环境变量❓$exportDD_ROBOT_TOKEN=404e99******36d17fa1202$echo$DD_ROBOT_TOKEN#404e99*****......
  • django中配置favicon.ico
    方法一:使用重定向在项目的urls.py中添加规则:fromdjango.urlsimportpathfromdjango.views.generic.baseimportRedirectViewurlpatterns=[...path('favicon.ico',RedirectView.as_view(url='static/img/favicon.ico')),]复制这种方式我认为是最......
  • 2023年4月16日09:03:49
    昨天就画了软件工程的图,其他没有干。昨天的画图过程中有一个问题,就是自己没有很专注的去画图,不然那个图应该可以早点完成。现在你的SpringBoot又学完了一遍,什么叫有,但没办法,确实是又,但我学的很快,也学到了很多跟以前不一样的东西,现在我又有一个个人“规律那就是我不断的学,不断的......