django外调用url_Django基础之二(URL路由)

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函数

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

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

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

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

name:url名称

include 语法

include(module,namespace=None,app_name=None)

include(pattern_list)

include((pattern_list,app_namespace),namespace=None)

include((pattern_list,app_namespace,instance_namwespace))

module:URLconf模块

namespace:URL命名空间

app_name:app的命名空间

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

app_namespace:应用名称空间

instance_namespace:实例的命名空间

实例:

- 主urls.py

from django.conf.urls import url,include

from django.contrib import admin

urlpatterns = [

url(r'^dashboard/',include('dashboard.urls')),

url(r'^admin/',admin.site.urls)

]

- dashboard.urls配置文件

from django.conf.urls import url,include

from . import views

urlpatterns = [

url(r'^user/',include([

url(r'^list/$',view.userlist,name='user_list'),

url(r'^info/$',view.userinfo,name='user_linfo'),

url(r'^modify/',include([

url(r'status/$',view.modifystatus,name='modify_status')

]))

]))

]

- dashboard.views视图

from django.shortcuts import render

from django.http import HttpResponse

# Create your views here.

def index(request):

return HttpResponse('Index Page')

def userList(request):

return HttpResponse("User List Page")

def userStatus(request):

return HttpResponse("User Status Page")

def UserInfo(request):

return HttpResponse("User Info Page")

- 请求方式

curl http://192.168.33.10:8080/dashboard/user/user_list/

curl http://192.168.33.10:8080/dashboard/user/modify/status/

curl http://192.168.33.10:8080/dashboard/user/modify/info/

url参数

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

urlpatterns = [

url(r'^article/2003/$',views.special_case_2003,name='special_case_2003'),

url(r'^article/(2004)/$',views.articleViewInfo,name='special_case_2003'),

url(r'^user/([0-9]{4})/$',views.userInfo),

url(r'^date/([0-9]{4})/([0-9]{2})/([0-9]{2})$',views.dateInfo)

]

对应的视图函数

def special_case_2003(request):

return HttpResponse("2003")

def articleViewInfo(request,*args,**kwargs):

print(args) #位置参数获取

return HttpResponse('request2004')

def userInfo(request,*args,**kwargs):

return HttpResponse(json.dumps(args))

def dateInfo(request,*args,**kwargs):

data = {"year":args[0],"month":args[1],"day":args[2]}

# return HttpResponse(json.dumps(data))

return JsonResponse(data)

关键字参数

语法

(?Ppattern)

- name是传给视图参数的名字,

- pattern是一个正则表达式,也是关键字参数的值

实例:

url:

url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$',views.articleInfoView)

-------------------------

view视图函数

def articleInfoView(request,*args,**kwargs):

return JsonResponse(kwargs)

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

url参数-额外参数

URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数

django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数

url:

url(r'users/(?P[a-z]+)',views.users,{'extra_args':'hehehe'})

view视图函数:

from django.conf.urls import url

from . import views

urlpatterns = [

url(r'^blog/(?P[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),

]

请求地址:/blog/2005/

调用函数:views.year_archive(request, year='2005',foo='bar')

url反向解析

django给每个URL取了一个名字,存储每个URL与name的映射关系

根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。这种方式叫做反向解析URL、反向URL匹配、反向URL查询或者简单的URL反查

实例:

url:

from django.conf.urls import url

from . import views

urlpatterns = [

url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),

]

-----------------------

视图函数

from django.core.urlresolvers import reverse

模板:

{{ yaervar }}Archieve

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值