python测试开发django(3)--url配置

前言

我们在浏览器访问一个网页是通过url地址去访问的,django管理url配置是在urls.py文件。当一个页面数据很多的时候,通常会有翻页的情况,那么页数是不固定的,如:page=1

也就是url路径里面带参数的时候如何去处理呢?

urls.py配置规则

由于django版本比较多,在查资料时候,也会看到不同的版本用不同写法,对于初学者来说是比较迷惑的,总结了下,主要有三个:path、re_path、url,接下来具体分析下这三个有什么区别。

path只能绝对匹配路径地址,不支持正则匹配;

re_path 支持正则匹配,django 1.x版本常用

url 支持正则匹配,实际上就是return re_path,django 2.x版本推荐;

#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
    path("in/",views.index),
    re_path('^$',views.index),
    # url('^$',views.index),
    url('^ab/$',views.index),
]

 在浏览器上访问http://127.0.0.1:8000/in/http://127.0.0.1:8000/http://127.0.0.1:8000/ab/发现都能访问到对应内容;

打开path()和re_path()源码,就能看到path()的匹配规则是RoutePattern,re_path()匹配规则是RegexPattern

path = partial(_path, Pattern=RoutePattern)
re_path = partial(_path, Pattern=RegexPattern)

 在打开url()对应的源码,实际上就是return re_path(),后续统一用url()就可以了。

def url(regex, view, kwargs=None, name=None):
    return re_path(regex, view, kwargs, name)

 匹配路径统一在后面加个/,前面不用加/,如:in/,ab/;

url是部分动态

当访问的页面有分页的情况,对应的页数就不能写死,如访问:http://127.0.0.1:8000/ab/page=1,那就不能这样写死了;

url('^ab/page=1$',views.demo)  

 如果想匹配任意的页数,前面的部分ab/page=不变,匹配任意数字,可以用正则\d+匹配

url('^ab/page=\d+$',views.demo)

 这样在浏览器上输入任意page页数都能访问一个固定地址,依然不是我们想要的结果,我们希望不同的页数,访问不同的地址,于是可以写个带参数的视图函数

xjyn/views.py文件写个带参数的视图函数,当输入的page=后面不是数字就抛个异常404

from django.shortcuts import render
from django.http import HttpResponse,Http404
# Create your views here.

def index(request):
    return HttpResponse("hello world! come on")
def hui(request):
    return render(request,'a.html')

def page(request,num):
    try:
        num=int(num)
        return render(request,'a.html')
    except:
        raise Http404

 urls.py配置

#helloworld/helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path,path
from xjyn import views

urlpatterns=[
    path("in/",views.index),
    re_path('^$',views.index),
    # url('^$',views.index),
    url('^ab/$',views.hui),
    url('^ab/page=(\d+)$',views.page),
]

 接下来浏览器输入: http://127.0.0.1:8000/ab/page=10,能返回a.html页面。

视图函数里面返回的是一个静态的a.html模板页面,后面会讲模板参数化配置。

404报错页面

如果输入的page不是数字,如:http://127.0.0.1:8000/ab/page=c,会出现报错页面:

Page not found(404)

 看到这种报错页面,因为django设置文件setting.py里面有个参数DEBUG=True,将其更改为False,Django将显示标准的404页面。

由于处于开发阶段,DEBUG默认为True,当开发完成正式发布产品上线时,需要将DEBUG=False

 ALLOWED_HOSTS

ALLOWED_HOSTS是域名访问权限,设置可以访问的域名,默认值为空[],只允许localhost或127.0.0.1在浏览器上访问。

DEBUG改成False之后,需要重新启动服务,同时需要加个ALLOWED_HOSTS地址,如果想让所有的域名都能访问,可以设置为:ALLOWED_HOSTS=[*]

 重新启动服务python manage.py runserver,出现404就是下面这种标准的了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值