zoukankan      html  css  js  c++  java
  • python测试开发django-4.获取url参数和name的作用

    前言

    如打开博客园按时间分类标签页【https://www.cnblogs.com/yoyoketang/archive/2018/10.html】,里面是时间参数是动态的,如果我想获取里面的时间参数2018和10这两个参数,这就涉及到url参数的获取了。

    获取url参数

    先用path去匹配一个url地址,类似于:archive/2018/10.html,于是取两个参数名称year,month。参数用<name>这种格式

    from django.conf.urls import url
    from django.urls import re_path, path
    from hello import views
    urlpatterns = [
    
        # 匹配 archive/2018/10.html
        path("archive/<year>/<month>.html", views.home),
    ]
    
    

    hello.py/views.py视图函数内容

    from django.shortcuts import render
    from django.http import HttpResponse, Http404
    
    # Create your views here.
    
    def home(request, year="2018", month="01"):
        return HttpResponse("获取当前页面home时间标签:%s年/%s月" %(year, month))
    

    启动服务后,浏览器输入地址:http://127.0.0.1:8000/archive/2018/10.html

    正则匹配url

    上面的案例虽然可以实现从url上获取参数了,但是会遇到一个问题,年和月可以输入各种数据,如:archive/2018/101.html,很显然不太合理。
    如果想让year参数只能是4个数字,month参数只能是2个数字,该怎么做呢?这就需要用到正则匹配了。

    • ?P 参数year
    • [0-9] 匹配0-9的数字
    • {4} 匹配4个数字
    • {1,2} 匹配1-2个数字
    • r 是raw原型,不转义
    • ^ 匹配开始
    • $ 匹配结束
    from django.conf.urls import url
    from django.urls import re_path, path
    from hello import views
    urlpatterns = [
    
        # 匹配 archive/2018/10.html
        path("archive/<year>/<month>.html", views.home),
        url(r'^archive1/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2}).html$', views.home1)
    ]
    

    hello.py/views.py视图函数内容

    from django.shortcuts import render
    from django.http import HttpResponse, Http404
    
    # Create your views here.
    
    def home(request, year="2018", month="01"):
        return HttpResponse("获取当前页面home时间标签:%s年/%s月" %(year, month))
    
    def home1(request, year="2018", month="01"):
        return HttpResponse("获取当前页面home1时间标签:%s年/%s月" %(year, month))
    

    启动服务后,浏览器输入地址:http://127.0.0.1:8000/archive1/2018/10.html
    (month输入一位数字也可以如:http://127.0.0.1:8000/archive1/2018/1.html)

    urls.py中定义name的作用

    如果现在有一个home.html页面,还有一个demo.html页面,之前两个页面是独立的不相干的,如果现在需要从home页,点个按钮,跳转到demo.html该如何实现?

    hello/templates/home.html写入以下内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上海-悠悠</title>
        <base href="http://127.0.0.1:8000/" target="_blank">
    </head>
    <body>
    <p>欢迎来到django!
        <br>
        <br>
        <a href="demo/">点这里到demo页</a>
    </p>
    </body>
    </html>
    

    hello/templates/demo.html写入以下内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>demo样式</title>
    </head>
    <body>
    
    <p>
        <h4> 这是我的博客地址,可以百度搜:上海-悠悠 </h4>
        <a href="https://www.cnblogs.com/yoyoketang/" target="_blank" >上海-悠悠-博客园</a>
        <hr>
        <h4> 《python自动化框架pytest》 </h4>
        <p>pytest是最强大最好用的python自动化框架,没有之一。本书详细讲解pytest框架使用方法,fixture功能是pytest的精髓,书中有详细的案例讲解。<br>
            另外最后会有项目实战代码,灵活用到selenium自动化项目上。<br>
            pytest交流群874033608
    
        </p>
        <a href="https://yuedu.baidu.com/ebook/902224ab27fff705cc1755270722192e4536582b" target="_blank" >百度阅读地址点此</a>
    </p>
    
    </body>
    </html>
    

    hello/views.py文件

    from django.shortcuts import render
    from django.http import HttpResponse, Http404
    
    # Create your views here.
    def home(request):
        return render(request, 'home.html')
    
    def demo(request):
        return render(request, 'demo.html')
    

    helloworld/urls.py文件内容

    
    from django.conf.urls import url
    from django.urls import re_path, path
    from hello import views
    urlpatterns = [
        url('^demo/$', views.demo),
        url('^home/', views.home),
    ]
    

    这样就可以实现在home页点点这里到demo页

    如果在页面里面把url地址写死了:<a href="demo/">点这里到demo页</a>,这样会有个弊端,当多个页面用到这个地址时候,如果后续这个地址变了,那就很难维护了。
    为了url地址维护起来方便,可以给它去个唯一的名称,也就是name参数,接下来在url配置里加个name名称。

    from django.conf.urls import url
    from django.urls import re_path, path
    from hello import views
    urlpatterns = [
        url('^demo/$', views.demo,  name="demo_page"),
        url('^home/', views.home,  name="home_page"),
    ]
    
    

    把hello/templates/home.html跳转的地址改成如下:

    <a href="{% url 'demo_page' %}">跳转到demo页面</a>
    

    django更多关于urls学习可以参考【https://docs.djangoproject.com/zh-hans/2.0/topics/http/urls/】

    django交流QQ群:779429633

  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/9893130.html
Copyright © 2011-2022 走看看