• Django之路由系统(urls.py)


    URL配置又称URL分发器(URLconfig)就像Django所支持网站的目录。他的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;以这种方式告诉Django,这个URL应该执行那个函数

    1 urlpatterns = [
    2     path('正则表达式', views视图函数,参数,别名),
    3 ]

     参数说明:

    •   一个正则表达式字符串
    •   一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
    •   可选的要传递给视图函数的默认参数(字典形式)
    •   一个可选的name参数

    注意:在Django2.0之后 ,摒弃了1.x中的url,而改用path

         在1.x中,使用url()即可实现正则匹配,但是在2.0中,是否使用正则需要使用不同的方式。

              path()无法使用正则;re_path()可以使用正则。

    1 ?: (2_0.W001) has a route that contains '(?P<', begins with a '^', or ends with a '$'
    Django 2.0 path error

    小试牛刀:

      使用正则匹配url执行对应的函数,urlspatterns中想捕获正则表达式匹配的结果用来出传递给views.py视图函数文件使用,需要用到分组匹配,或者使用第三个参数python字典进行传参。

      无名分组:

         位置参数:匹配出的结果按顺序依次传递给视图函数的形参(形参必须有序,匹配值按位置顺序进行传递)

         正则中小括号为分组,有分组,那么这个分组得到的用户输入的内容,就会作为对应函数的位置参数传进去,别忘了形参要写两个了

      有名分组:

           关键字参数:匹配出的结果按照命名对应传递给视图函数的形参(形参可以无序,匹配值按命名进行传递)

         (?P<year>[0-9]{4})这是命名参数,那么函数urlgroup(request,year),形参名称必须是year这个名字。而且注意如果你这个正则后面没有      写$符号,即便是输入了月份路径,也会被它拦截下拉,因为它的正则也能匹配上

     1 urltest.html:
     2 
     3      <!DOCTYPE html>
     4     <html lang="en">
     5     <head>
     6         <meta charset="UTF-8">
     7         <title>URLTest</title>
     8     </head>
     9     <body>
    10         <h1>当前时间:{{ LocalTime }}</h1>
    11     </body>
    12     </html>
    13 
    14 
    15 urls.py:
    16 
    17     from django.urls import path,re_path
    18     re_path(r'^baidu/([0-9]{2})/$',views.NewDate),
    19 
    20 views.py:
    21 
    22     def NewDate(req,a):
    23         LocalTimes = time.strftime("%Y-%m-%d %H:%M:%S",     time.localtime())
    24         return render(req,"urltest.html",{"LocalTime":LocalTimes})
    无名分组:re_path(r'^baidu/([0-9]{2})/$',views.NewDate),
     1 group.html:
     2     <!DOCTYPE html>
     3     <html lang="en">
     4     <head>
     5         <meta charset="UTF-8">
     6         <title>group</title>
     7     </head>
     8     <body>
     9         <h1>年:{{ Year }}</h1>
    10         <h1>月:{{ Mes }}</h1>
    11     </body>
    12     </html>
    13     
    14     
    15 urls.py:
    16     re_path(r'^time/(?P<year>[0-9]{4})/(?P<mes>[0-9]{2})/$',views.UrlGroup),
    17     
    18     
    19 views.py:
    20     def UrlGroup(req,year,mes):
    21     return render(req,"group.html",{"Year":year,"Mes":mes})
    有名分组:re_path(r'^time/(?P<year>[0-9]{4})/(?P<mear>[0-9]{2})/$',views.UrlGroup),

       别名:

        django url中第四个参数--别名,别名引入使Django的url配置与前端页面对url的引用完全解耦

     1 urls.py:
     2 
     3     re_path(r'^Adair/',views.time,name="times")
     4 
     5 
     6 views.py:
     7 
     8     def time(req):
     9         if req.method == "POST":
    10             return HttpResponse("POST OK!")
    11         return render(req,"Adair.html")
    12 
    13 Adair.html:
    14 
    15     <!DOCTYPE html>
    16     <html lang="en">
    17     <head>
    18         <meta charset="UTF-8">
    19         <title>TIME</title>
    20     </head>
    21     <body>
    22     <form action={% url "times" %} method="post">
    23         <input type="submit" name="提交">
    24     </form>
    25     </body>
    26     </html>
    别名:re_path(r'^Adair/',views.time,name="times")

       映射:

        在Django项目中,一个项目可能包含多个Django应用,而每个应用都有自己的独特的url映射规则,因此,将这些url映射保存在一个urls.py文件中是不利于网站的维护,因此Django提供了url映射的功能中

     

       在创建Django项目时,Django本身自带的urls.py为主url文件,每个新创建的应用可以创建自己独立的urls.py文件,url映射就是用主url文件映射到相应的应用url文件上

    1 re_path(r'^index/',include('APP.urls'))
    主URL
    1 from django.contrib import admin
    2 from django.urls import path,re_path,include
    3 from django.conf.urls import url
    4 from APP import views
    5 
    6 urlpatterns = [
    7     re_path(r'time/(?P<year>[0-9]{4})',views.date)
    8 ]
    应用URL
    1 def date(req,year):
    2     return HttpResponse(year)
    视图

     

  • 相关阅读:
    第07节-开源蓝牙协议BTStack框架代码阅读(上)
    第06节-开源蓝牙协议BTStack框架分析
    第05节-BLE协议物理层(PHY)
    第04节-BLE协议抓包演示
    第03节-BLE协议各层数据格式概述
    【重点声明】此系列仅用于工作和学习,禁止用于非法攻击。一切遵守《网络安全法》
    海外信息安全资源
    从浏览器攻击思考入门的问题。
    攻击载荷免杀技术
    聊聊NTLM认证协议
  • 原文地址:https://www.cnblogs.com/Adairye/p/12057414.html
Copyright © 2020-2023  润新知