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")
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/dbslinux/p/13041620.html
Copyright © 2011-2022 走看看