Django-url路由映射与views逻辑处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-url路由映射与views逻辑处理相关的知识,希望对你有一定的参考价值。

一、urls.py模块

  路由映射模块,主要完成url与views视图函数的映射。

  当一个url请求到来时,会按照这个模块中的url地址从上到下进行匹配,如果匹配成功,将执行映射试图中的函数;反之将返回404错误。

二、url配置

  1.urlpatterns

urlpatterns = []

  里面存放一条条的路由映射关系。

  2.url

url(正则表达式, 映射函数,参数[可选],别名[可选])

  3.配置方式

from django.conf.urls import url
from django.contrib import admin
from testfile import views

urlpatterns = [
    url(r^admin/, admin.site.urls),   #系统生成的映射
                                                  #注意里面的任意一条映射匹配成功,后面的则不在匹配
    url(r^articles/2003/$, views.special_case_2003),                           #表示articles/2003/这个路径映射views模块的special_case_2003函数
    url(r‘^articles/([0-9]{4})/$‘, views.year_archive),                        #表示2003可以是0-9的任意4个数字
    url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive),            #表示匹配二级目录
    url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail),  #表示匹配三级目录
]

  注意:上面匹配都加了小括号,这些括号里面的值会当作参数传递到后面的函数中,也就是,views.special_case_2003中.....

二、views视图逻辑处理

  1.HttpResponse(request,str)(request参数必须指定)

  定义的函数必须,定义一个形式参数,这个形式参数接收的url请求信息对象,可以通过这个形式参数的各种方法获取到各种请求信息   向用户返回信息,必须在函数结尾return,如果是要给用户返回一串字符串,那就必须返回HttpResponse方法,参数是要返回的字符串,需要先导入这个方法

  2.render(request,"index.html",context)

该函数要完成两个个操作:
    1.将从数据库获取的数据填充在{{}}之间
    2.渲染html页面并返回给请求端

  3.逻辑处理

from django.shortcuts import render,HttpResponse


def demo(request,path): //path是url匹配加括号默认传递过来的参数
    print(request.method)       #获取用户请求的路径
    return HttpResponse(path)  #将路径返回到页面

  注意:要获取路径时,需要在路由映射哪里用正则的分组()号,将要获取的路径分组,也就是括起来,如果路由映射里有多个分组,逻辑函数就需要多个形式参数接收.

  为了更好理解路径参数是如何传递过来的,我们重新来看看url的配置

from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r^admin/, admin.site.urls),   #系统生成的映射
    url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive),            #表示匹配二级目录
    url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail),  #表示匹配三级目录
]

  views.py函数参数配置

def month_archive(request,year,month): //这里的参数与路由中的括号是匹配的,
    pass

  当然,在url正则匹配的时候,我们也可以给分组命名,如:

from django.conf.urls import url
from django.contrib import admin
from testfile import views

urlpatterns = [
    url(r^admin/, admin.site.urls),   #系统生成的映射
    url(r^(?P<year>articles/2003)/$, views.month_views),    #表示articles/2003/这个路径映射views模块的month_views函数

  那么在views视图中,我们可以这样来接受這个路径参数:

from django.shortcuts import render,HttpResponse

# Create your views here.

def month_view(request,year):
    print(year)
    return render(request,index.html)

三、路由配置include方式

  如果一个网站很多,有很多app应用,那么就需要很多路由分发。如果将所有的路由分发都放在urlconf文件下,這样会使得文件不易于管理,为此,我们可以给每一个app都创建一个urls.py文件,然后再urlconf中的urlpatterns中将该urls.py文件包含进来就行了。

from django.conf.urls import include, url # 导入全局url
urlpatterns = [
    url(r^bug, include(testfile.urls)),   #将访问路径以bug开头的路径分发到app1下的urls.py模块里进行路由映射
]

  这样,我们可以在testfile的urls下配置属于testfile的所有路由规则和逻辑处理函数。

   

 

以上是关于Django-url路由映射与views逻辑处理的主要内容,如果未能解决你的问题,请参考以下文章

Django-URL路由系统

二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

Django框架详解

django-URL转换器

Django-URL路由分发include

第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置