zoukankan      html  css  js  c++  java
  • 六.url配置

    1.Django 如何处理一个请求 
    (1). django 加载 ROOT_URLCONF(settings.py中配置的) 指定的模块,并寻找可用的urlpatterns变量.它是 django.conf.urls.url() 实例(每一条url就是一个实例)的一个Python 列表。 
    (2). 请求来了,Django 依次匹配每个 URL,在与请求的URL 匹配的第一个url停下来 
    (3). 一旦其中的一个正则表达式匹配上,Django 将导入并调用给出的视图,它是一个简单的 Python 函数(或者一个基于类的视图)。视图将获得如下参数: 
    参数一:一个HttpRequest 实例。 参数二:如果匹配的正则表达式返回了没有命名的组,那么正则表达式匹配的内容将作为 位置参数提供给视图。 参数三:关键字参数由正则表达式匹配的命名组组成,但是可以被django.conf.urls.url()的 可选参数kwargs覆盖。
    (4). 如果没有匹配到正则表达式,或者如果过程中抛出一个异常,Django 将调用一个适当的错 误处理视图:handler404, handler500, handler403, handler400

    2.URLconf:
      URLconf是一个python模块,是一个URL模式(简单正则表达式)到Python函数(视图)之间
    的映射
    3.urlpatterns:
      urlpatterns 是一个 url() 实例类型的Python 列表。
      urlpatterns 中的每个正则表达式在第一次访问它们时被编译
    4.url函数:
      url(regex, view, kwargs=None, name=None)
      regex: 一个字符串(原始字符串就是前面加r)或简单的正则表达式
      view: view参数是一个视图函数或as_view()的结果(基于类的视图)
      kwargs: 传递额外的参数给视图
      name: url名称
    5.include:
      include(module, namespace=None, app_name=None)
      include(pattern_list)
      include((pattern_list, app_namespace), namespace=None)
      include((pattern_list, app_namespace, instance_namespace))
      module: URLconf模块
      namespace:URL命名空间
      app_name: app的命名空间
      pattern_list: 可迭代的django.conf.urls.url()实例
      app_namespace: 应用的命名空间
      instance_namespace: 实例的命名空间
    include 示例--两种写法
      示例1:
      urlpatterns = [
        url( r'^$', RedirectView.as_view(url="/dashboard/")),
        url(r'^dashboard/', include("dashboard.urls")),
        url(r'^accounts/', include("accounts.urls")),
        url(r'^admin/', admin.site.urls),
      ]
      示例2:
      urlpatterns = [
        url(r"^user/", include([
          url(r'^list/$', view.userlist, name="user_list"),
          url(r'^info/$', view.userinfo, name="userer_inf),
          url(r'^modify/', include([
            url(r'status/$',view.modifystatus, name="user_modify_status"),
          ]))
        ]))
      ]
    6.url参数—位置参数:
    若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
    from django.conf.urls import url
    from . import views
    urlpatterns = [
      url(r'^articles/2003/$', views.special_case_2003),
      url(r'^articles/([0-9]{4})/$', views.year_archive),
      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),
    ]
    请求地址: /articles/2003/03/03/
    调用函数:views.article_detail(request, "2003", '03', '03')
    7.url参数——关键字参数:有点特殊,因为它要传变量名
    语法:
    (?p<name>pattern)
    name是传给视图参数的名字,
    pattern是一个正则表达式,也是关键字参数的值
    示例:
    from django.conf.urls import url
    from . import views
    urlpatterns = [
      url(r'^articles/2003/$', views.special_case_2003),
      url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
      url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
      url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',views.article_detail),
    ]
    请求地址:/articles/2003/03/03/
    调用函数:views.article_detail(request, year='2003', month='03', day='03').
    8.url参数——额外参数:
    URLconfs 具有一个钩子,让你传递一个Python 字典作为额外的参数传递给视图函数
    django.conf.urls.url() 函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递
    给视图函数的额外关键字参数
    示例:
    from django.conf.urls import url
    from . import views
    urlpatterns = [
      url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
    ]
    请求地址:/blog/2005/
    调用函数:views.year_archive(request, year='2005',foo='bar')
    9.URL反向解析:
    django给每个URL取了一个名字,存储每个URL与name的映射关系
    根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的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
    year = 2006
    return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
    模板中使用:
    <a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a>
    10.基于类的视图:
    视图是一个可调用的对象,它接收一个请求然后返回一个响应,这个可调用对象可以不只
    是函数,Django提供一些可以用作视图的类。
    基于类的视图使用Python 对象实现视图,它提供除函数视图之外的另外一种方式
    View
    属性:
      http_method_names
    方法:
      as_view()
      dispatch()
      http_method_not_allowed()
    11.类视图登陆验证:
    from django.contrib.auth.decorators import login_required
    from django.utils.decorators import method_decorator
    class FooView(View):
      @method_decorator(login_required)
      def get(request, *args, **kwargs):
        return HttpResponse("hello world")
  • 相关阅读:
    调试D2JS
    PG 中 JSON 字段的应用
    面试----
    机器学习面试题
    闭包和装饰器
    scss-混合@mixin @include @function
    scss基本使用及操作函数
    常用的scss函数(mixin)
    二叉搜索树基本操作实现
    判断一棵树是否是二叉搜索树
  • 原文地址:https://www.cnblogs.com/dbslinux/p/13041620.html
Copyright © 2011-2022 走看看