zoukankan      html  css  js  c++  java
  • django-高级视图和url配置

    高级视图和url配置

    一、URLconf技巧

    1、流线型化函数导入

    对于配置url,我们可以使用以下几种方式:

    (1)引入view中的函数

    from firstSite.view import current_datetime,hour_ahead
    from django.conf.urls import url,include,patterns
    urlpatterns
    = patterns('', (r'^time/$',current_datetime), (r'^time/plus/(d{1,2})/$',hour_ahead), )

    (2)引入view文件:

    from django.conf.urls import url,include,patterns
    from firstSite import view
    
    urlpatterns = patterns('',
         (r'^time/$',view.current_datetime),
         (r'^time/plus/(d{1,2})/$',view.hour_ahead),
    )

    2、url嵌套

      如果我们引入了多个app下名为views.py的多个文件,以函数引入太麻烦以文件引入又不方便,这种情况下我们可以使用"include"来分成根url文件和各个app的子url文件;

    使用我们之前的例子,名为firstSite的文件下有两个分别名为books和contact的app,则我们的根URL可以为这样:(注意:没有“$”终止符,不然的话不会读取到子urls文件)

    from django.conf.urls import url,include,patterns
    from firstSite import view
    urlpatterns = [
        url(r'^information/$',view.info),
        url(r'^time/$',view.currentTime),
        url(r'^time/plus/(d{1,2})$',view.hour_ahead),
        url(r'^current_time/$',view.current_datetime),
        url(r'^meta/$',view.display_meta),
        url(r'^books/',include('books.urls')),      #引入books的urls.py
        url(r'^contact/',include('contact.urls')),  #引入Contact的url.py
    ]

    两个子urls文件:

    #books.urls.py
    #    -*- coding:utf-8 -*-
    from django.conf.urls import url
    from django.contrib import admin
    from . import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        #url(r'^operation$',views.addData),
        url(r'^operation/plus/(w{2,6})$',views.delete_data),
        url(r'^all$',views.all_data),
        url(r'^search/$',views.search),
    ]
    
    #contact.urls.py
    #    -*- coding:utf-8 -*-
    from contact import views
    from django.conf.urls import url
    
    urlpatterns = [
        url(r'^contact/$',views.contact),
    ]

    配置完成之后,访问是只要加上父url里的域名和子url里的域名就可以了:如:127.0.0.1:60500/contact/contact 

    3、调试模式中的特例

    在Django调试模式下可以修改URLconf,我们只要在运行时检查DEBUG配置项的值

    例如:

    from django.conf import settings
    from django.conf.urls import url,patterns
    from . import view
    
    urlpatterns = patterns('',
                           (r'^$',view.homePage),
                           (r'^time/$',view.current_datetime),
                   )
    if settings.DEBUG:
        urlpatterns += patterns('',
            (r'^debuginfo$',view.debuginfo),
        )

     ——>

    或者使用partterns列表:

    from django.conf import settings
    from django.conf.urls import url,patterns
    from . import view
    
    urlpatterns = [
        url(r'^information/$',view.info),
        url(r'^time/$',view.currentTime),
    ]
    
    if settings.DEBUG:
        urlpatterns .append(url(r'^debuginfo/$',view.debuginfo),)

    4、使用命名组

      之前的例子中我们都使用的无命名的正则表达式组,接下来我们来使用命名正则表达式组来捕获url,并将其作为关键字参数传送给视图,在python正则表达式中,命名的正则表达式组的语法是(?P<name>pattern),其中name是组的名字 而pattern是匹配的某个模式,  

    from django.conf.urls import url    #导入 django.conf.urls 模块下的url类
    #from . import view   #绑定 URL 与视图函数(view.py文件)
    from django.contrib import admin
    
    from firstSite.view import current_datetime,hour_ahead
    
    admin.autodiscover()
    from django.conf.urls import url,include,patterns
    from firstSite import view
    urlpatterns = [
        url(r'^time/plus/(d{1,2})$',view.hour_ahead),#url(r'^time/plus/(?P<offset>d{1,2})$',view.hour_ahead),
        url(r'^ago/(d{2})/(d{2})$',view.Month_archive)#url(r'^ago/(?P<year>d{2})/(?P<month>d{2})/$',view.Month_archive),
    ]

     这两种方式第一种就是使用无名组的URLconf,第二种就是使用命名组的URLconf;他们的作用是一样的,唯一的差别就是:第二种取得值是以关键字参数 的方式而不是以位置参数的方式传递给视图函数;

    函数的调用则为:

    Month_archive(request,'2017','03')
    Month_archive(request,year='2017',month='03'

     使用命名组的好处:

    (1)使你的URLconf显得更加清晰,减少搞混参数次序的潜在的bug

    (2)在函数定义中对参数进行重新排序

    (3)可读性强 

    5、理解匹配/分组算法

    (1)如果有任何命名组,Django会自动忽略非命名组使用命名组;

    (2)否则,Django会把所有非命名组以位置参数的形式传递;

    (3)在以上两种情况,Django同时会以关键字参数的方式传递一些额外参数;

    6、传递额外的参数到视图函数中

    当我们的视图函数被复用只有少数部分不同,如需要使用不同的模板,

  • 相关阅读:
    该虚拟机似乎正在使用中,请获取所有权
    分配销售区域
    未对销售组织 XXX 分销渠道 00 语言 ZH 定义
    Bash 遍历目录
    plsql 不需配置*.ora就可以访问数据库
    arch linux
    拓端数据tecdat|R语言有限混合模型(FMM,finite mixture model)及其EM算法聚类分析间歇泉喷发时间
    拓端数据tecdat|使用R语言进行多项式回归、非线性回归模型曲线拟合
    拓端数据tecdat|R语言使用ARIMAX预测失业率经济时间序列数据
    拓端数据tecdat|R语言用ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
  • 原文地址:https://www.cnblogs.com/cencenyue/p/8034097.html
Copyright © 2011-2022 走看看