Django(二) 路由和视图

路由定义

路由是客户端访问的url路径与视图函数间的一一映射关系。Django中的路由关系在urls.py文件中,基本格式如下:

urlpatterns = [
    url(regex,view, kwargs=None, name=None),
]

参数说明:
regex: 匹配url路径的正则表达式,比如r'^login/', 匹配以login/开头的路径,当你在浏览器地址栏输入http://127.0.0.1/login/时,会调用login映射的视图函数来处理请求。几点提醒,
1. 为了避免转义,正则的前面最好加上r
2. 路径前默认都有前导的反斜杠/,我们在正则中就不需要再加了,比如r'login/'就可以,而不用r'^/login/'
3. 如果我们访问127.0.0.1:8000/loginlogin后未加反斜杠/,将会重定向至127.0.0.1:8000/login/,这时因为默认设置APPEND_SLASH = True。另外,任何未在setting.py文件中定义的配置都由django.conf.global_settings 提供
4. 在进行url路径匹配时,只要匹配成功一个,就不在向下匹配。
view: 映射的视图函数
name: 可以为视图函数定义别名,这个稍后介绍。
配置根目录:
我们必须为项目配置根目录,即当用户访问的url不带路径时,必须有相应的视图函数处理并返回响应,而不是错误页面。加入下面的路由:
url(r'^$', view) 当匹配路径为空,调用指定的视图函数处理。

路径分组和视图函数传参

分组是正则中的操作,对正则表达式加括号,就可以实现路径分组。分组的目的是为了给视图函数传参。这里有两种分组方式,通过位置传参的简单分组,和通过关键字传参的命名分组。我们通过下面的栗子来介绍这两种分组方式。
1.新建一个项目learn, 并创建应用calc, 在calc的视图函数中定义一个计算加法的函数add:

from django.http import HttpResponse
# HttpResponse用于直接返回字符串响应
def add(request,a,b):
    # add 函数除了第一个请求对象参数,还从urls.py中的路由接收另外两个参数用于求和
    c = int(a) + int(b)
    return HttpResponse('{a} + {b} = {c}'.format(a=a, b=b, c=str(c)))

2.在项目的urls.py中编辑路由映射:
2.1 简单分组:

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^add/(\d+)/(\d+)/', calc_views.add),
    # 简单分组:通过圆括号匹配两组数字,作为参数传给视图函数add
]

2.2 命名分组:

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^add/(?P<c>\d+)/(?P<b>\d+)/', calc_views.add),
    # 通过(?P<...>)命名分组, 将分组名a和b传给视图函数add中的关键字参数a和b,
    # 分组名必须和关键字匹配:如果分组名为x,y 而视图的关键字是a,b,就会报错。
]

3.在浏览器地址栏输入http://127.0.0.1:8000/add/4/5/,你将看到以下结果:
这里写图片描述

4.另外,如果不用分组,可以通过url中的query string查询字符串来提取数字,进行计算。
因此url需要使用查询字符串形式:
http://127.0.0.1:8000/add/?a=4&b=5
urls路由如下:

urlpatterns = [
    url(r'^add/$', calc_views.add, name='add'),
]

视图函数中提取查询字符串:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值