资讯专栏INFORMATION COLUMN

Django基础之二(URL路由)

Prasanta / 689人阅读

摘要:这种方式叫做反向解析反向匹配反向查询或者简单的反查实例视图函数模板

URL路由 简介

对于高质量的web应用来说,使用简洁,优雅的URL路由是一个值得尊重的细节,Django可以随心所欲的设计URL,不受框架的约束

为了给一个应用设计URL,你需要一个Python模块,通常被称为URLconf,这个模块是纯粹的URL模式(简单的正则表达式)到python函数(视图函数)的简单映射

Django如何处理一个请求

django加载ROOT_URLCONF指定的模块,并寻找可用的urlpatterns,它是django.conf.urls.url()实例的一个python列表

django依次匹配每个URL,在与请求URL匹配的第一个url停下来

一旦其中的一个正则表达式匹配上,Django将导入并调用所给的视图,这个视图是一个简单的python函数或者类

如果没有匹配到正则表达式,或者如果过程中跑出异常,django将调用一个适当的错误处理视图:handler404,handler500,handler403,handler400

URLconf

URLconf是一个python模块,是一个URL模式(简单的正则表达式)到python视图(函数或者类)之间的映射

urlpatterns

urlpatterns:是一个url()实例类型的python列表

urlpatterns:中的每个正则表达式在第一次访问他们时被编译

url函数

</>复制代码

  1. url(regex,view,kwargs=None,name=None)

regex:一个字符串(原始字符串)或简单的正则表达式

view:是一个视图函数(类)或者as_view()的结果

kwargs:传递额外的参数给视图

name:url名称

include 语法

</>复制代码

  1. include(module,namespace=None,app_name=None)
  2. include(pattern_list)
  3. include((pattern_list,app_namespace),namespace=None)
  4. include((pattern_list,app_namespace,instance_namwespace))

module:URLconf模块

namespace:URL命名空间

app_name:app的命名空间

pattern_list:可迭代的djang.conf.urls.url()实例

app_namespace:应用名称空间

instance_namespace:实例的命名空间

实例:

</>复制代码

  1. - 主urls.py
  2. from django.conf.urls import url,include
  3. from django.contrib import admin
  4. urlpatterns = [
  5. url(r"^dashboard/",include("dashboard.urls")),
  6. url(r"^admin/",admin.site.urls)
  7. ]
  8. - dashboard.urls配置文件
  9. from django.conf.urls import url,include
  10. from . import views
  11. urlpatterns = [
  12. url(r"^user/",include([
  13. url(r"^list/$",view.userlist,name="user_list"),
  14. url(r"^info/$",view.userinfo,name="user_linfo"),
  15. url(r"^modify/",include([
  16. url(r"status/$",view.modifystatus,name="modify_status")
  17. ]))
  18. ]))
  19. ]
  20. - dashboard.views视图
  21. from django.shortcuts import render
  22. from django.http import HttpResponse
  23. # Create your views here.
  24. def index(request):
  25. return HttpResponse("Index Page")
  26. def userList(request):
  27. return HttpResponse("User List Page")
  28. def userStatus(request):
  29. return HttpResponse("User Status Page")
  30. def UserInfo(request):
  31. return HttpResponse("User Info Page")
  32. - 请求方式
  33. curl http://192.168.33.10:8080/dashboard/user/user_list/
  34. curl http://192.168.33.10:8080/dashboard/user/modify/status/
  35. curl http://192.168.33.10:8080/dashboard/user/modify/info/
url参数

若要从URL中捕获一个值,只需要在他周围放置一对圆括号

</>复制代码

  1. urlpatterns = [
  2. url(r"^article/2003/$",views.special_case_2003,name="special_case_2003"),
  3. url(r"^article/(2004)/$",views.articleViewInfo,name="special_case_2003"),
  4. url(r"^user/([0-9]{4})/$",views.userInfo),
  5. url(r"^date/([0-9]{4})/([0-9]{2})/([0-9]{2})$",views.dateInfo)
  6. ]

对应的视图函数

</>复制代码

  1. def special_case_2003(request):
  2. return HttpResponse("2003")
  3. def articleViewInfo(request,*args,**kwargs):
  4. print(args) #位置参数获取
  5. return HttpResponse("request2004")
  6. def userInfo(request,*args,**kwargs):
  7. return HttpResponse(json.dumps(args))
  8. def dateInfo(request,*args,**kwargs):
  9. data = {"year":args[0],"month":args[1],"day":args[2]}
  10. # return HttpResponse(json.dumps(data))
  11. return JsonResponse(data)
关键字参数

</>复制代码

  1. 语法
  2. (?Ppattern)
  3. - name是传给视图参数的名字,
  4. - pattern是一个正则表达式,也是关键字参数的值

实例:

</>复制代码

  1. url:
  2. url(r"^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$",views.articleInfoView)
  3. -------------------------
  4. view视图函数
  5. def articleInfoView(request,*args,**kwargs):
  6. return JsonResponse(kwargs)

请求方式:http://192.168.33.10:8080/dashboard/articles/2004/12/21/

url参数-额外参数

URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数
django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数

</>复制代码

  1. url:
  2. url(r"users/(?P[a-z]+)",views.users,{"extra_args":"hehehe"})
  3. view视图函数:
  4. from django.conf.urls import url
  5. from . import views
  6. urlpatterns = [
  7. url(r"^blog/(?P[0-9]{4})/$", views.year_archive, {"foo": "bar"}),
  8. ]
  9. 请求地址:/blog/2005/
  10. 调用函数:views.year_archive(request, year="2005",foo="bar")
url反向解析

django给每个URL取了一个名字,存储每个URL与name的映射关系
根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。这种方式叫做反向解析URL、反向URL匹配、反向URL查询或者简单的URL反查
实例:

</>复制代码

  1. url:
  2. from django.conf.urls import url
  3. from . import views
  4. urlpatterns = [
  5. url(r"^articles/([0-9]{4})/$", views.year_archive, name="news-year-archive"),
  6. ]
  7. -----------------------
  8. 视图函数
  9. from django.core.urlresolvers import reverse
  10. 模板:
  11. {{ yaervar }}Archieve

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44955.html

相关文章

  • Django基础之二URL路由

    摘要:这种方式叫做反向解析反向匹配反向查询或者简单的反查实例视图函数模板 URL路由 简介 对于高质量的web应用来说,使用简洁,优雅的URL路由是一个值得尊重的细节,Django可以随心所欲的设计URL,不受框架的约束 为了给一个应用设计URL,你需要一个Python模块,通常被称为URLconf,这个模块是纯粹的URL模式(简单的正则表达式)到python函数(视图函数)的简单映射 ...

    Julylovin 评论0 收藏0
  • Django基础之(十)DRF

    摘要:基础之二简介官方文档安装与配置安装配置重新创建数据库并配置新建一个的将座位,并做配置加入环境变量定义好主备路由主路由项目路由创建名称地址联系电话邮箱创建数据库同步生成数据北京机房北京市酒仙桥北京机房上海机房上海上 DRF基础之二 简介 官方文档 Requirements REST framework requires the following: Python (2.7, 3.4, ...

    eccozhou 评论0 收藏0
  • Django基础之五(回顾)

    摘要:回顾模板相关的知识点与模型不相关的做渲染,传递和前端页面主路由文件路由文件视图文件模板文件类视图版本的模板渲染路由类视图版本模板视图版本路由模板视图版本接受模板传过来的参数,然后渲染 回顾 模板相关的知识点 与模型不相关的 render做渲染,传递request和前端页面 - devops/urls.py #主路由文件 from django.conf.urls import url,...

    jhhfft 评论0 收藏0

发表评论

0条评论

Prasanta

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<