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/】
python学习交流QQ群:588402570

原文地址:https://www.cnblogs.com/yoyoketang/p/9893130.html

时间: 2024-11-10 15:05:48

python测试开发django-4.获取url参数和name的作用的相关文章

[js开源组件开发]query组件,获取url参数和form表单json格式

query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……,最近项目紧,几个小组,只有我一个前端,公司对前端的定位不清晰,导致前端人员过少的情况.所以还得促进公司前端人员增长,不然再这么玩下去,我要被玩死了,一个公司,不可能靠一个资深前端来支撑二三十个开发的需求,这是不现实的,特别是现在的页面不再是复制粘贴的前况下.我默默耕芸,所以这次我整理了这一个月里所有

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 fro

python测试开发django-16.JsonResponse返回中文编码问题

前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面的User表,测试数据如下 user_name psw mail yoyo 123456 [email protected] yoyo2 111111 1 yoyo5 111111 0 接着上一篇[python测试开发django-15.查询结果转json(serializers)],如果数据库里面

2019第一期《python测试开发》课程,10月13号开学

2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20:30-22:30 报名费:报名费2000一人(周期2个月) 联系QQ:283340479 课表如下 课程主要涉及的内容: 1.httprunner框架以及web平台做接口自动化测试 (装逼必备) 2.django平台开发 (python开发必会) 3.pytest框架结合selenium做web自动化测试 (

jquery 获取URL参数并转码的例子

通过jquery 获取URL参数并进行转码,个人觉得不错,因为有时不转码就会有乱码的问题.jquery 获取URL参数并转码,首先构造一个含有目标参数的正则表达式对象,匹配目标参数并返回参数值代码: <script type="text/javascript"> $(document).ready(function(){ var pic_url=getUrlParam("picture"); $("#childpic").attr(&

jquery 获取URL参数并转码

代码如下: <script type="text/javascript"> $(document).ready(function(){ var pic_url=getUrlParam("picture"); $("#childpic").attr("src",pic_url); var content=getUrlParam("content"); $("#content")

python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布局用到的是django-crispy-forms框架,本篇详细讲下django-crispy-forms的官方文档案例 django-crispy-forms 当我们使用xadmin后台的时候,在INSTALLED_APPS里面同时添加了xadmin和crispy_forms这2个app,xadmi

Python测试开发-创建模态框及保存数据

Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎么实现这种弹出效果,bootstrap已经为我们提供了相应的组件. 1.界面原型 点击添加,弹出模态框, 然后输入 用户:tester, 消息:你好.如下图1所示: ▲图1 再点击保存,那么数据库就存入了以上输入的数据,查看界面的用户列表会显示tester,如下图2所示: ▲图2 2.开发过程 接下

js获取url参数

   //获取url参数    function getRequest() {         var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object();         if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for(var i =