zoukankan      html  css  js  c++  java
  • django的request处理流程和错误处理

    jango如何处理一个请求:
    1.找到root URLconf module ,就是ROOT_URLCONF中的信息。但是,如果传进来的HttpRequest对象有一个名

    叫urlconf的属性(这是在middleware中设置的),那么将采用这个属性的值来代替ROOT_URLCONF中的信息。
    2.django导入模块,寻找urlpatterns变量。这个变量必须是一个list类型的值。是使用patterns()函数返回

    的。
    3.django搜索urls,找到第一个匹配的url
    4.django导入和调用给出的view函数。这个函数将得到一个HttpRequest对象作为第一个参数,再加上从url

    上得到的其他参数的值。
    5.如果没有匹配到任何正则表达式,那么将报错。并转到错误视图处理。

    注意:每个正则表达式都会在第一次访问时编译,这样可以更快。

    patterns中可以使用include()将其他应用导入到这里。

    传递额外的参数到视图函数

    urlpatterns = patterns(’blog.views’,
    (r’^blog/(?P<year>\d{4})/$’, ’year_archive’, {’foo’: ’bar’}),)

    这样,views.year_archive函数将得到两个参数year和foo。
    如果两个参数的名字是一样的,则保存从url中得到的参数的值。

    urlpatterns = patterns(’’,
    (r’^blog/’, include(’inner’), {’blogid’: 3}),
    )
    这样,inner.py中的每行url都会包含blogid这个参数。不管视图函数是否需要。

    一般情况下,我们不能够将两个及以上的url映射到一个view函数。因为,django无法从view函数得到相对应

    的url。
    解决这种办法可以使用 named URL patterns
    urlpatterns = patterns(’’,
    url(r’^archive/(\d{4})/$’, archive, name="full-archive"),
    url(r’^archive-summary/(\d{4})/$’, archive, {’summary’: True}, "arch-summary"),
    )


    编写视图函数

    返回错误
    def my_view(request):
    # ...
     if foo:
      return HttpResponseNotFound(’<h1>Page not found</h1>’)  #返回的是404错误
     else:
      return HttpResponse(’<h1>Page was found</h1>’)


    使用状态码:
    def my_view(request):
     # ...
     # Return a "created" (201) response code.
     return HttpResponse(status=201)        #可以返回任何状态码

    404错误:
    from django.http import Http404
     def detail(request, poll_id):
      try:
       p = Poll.objects.get(pk=poll_id)
      except Poll.DoesNotExist:
       raise Http404
      return render_to_response(’polls/detail.html’, {’poll’: p})

    Http404将调用你的template根目录下的404.html的文件

    默认情况下,当产生了Http404 exception,django会使用一个特殊的视图来处理404错误——

    django.views.defaults.page_not_found,然后它会装载和渲染404.html模板。这个处理函数会返回一个变

    量:request_path。就是产生异常的这个url。

    这个处理函数可以满足99%的web应用,如果你想使用自己的404处理函数,可以如下:
    handler404='mysite.my_own_404_view'  (urls.py文件中)
    django决定404的处理视图是通过在你的root URLconf中查找handler404来实现的。如果没有找到,就使用系

    统自带的。
    注意:
        1.当一个url没有找到匹配的正则表达式时,那么他就会使用404视图
        2.如果你想使用系统自带的404处理视图,那么你还要创建一个404.html模板。
        3.如果settings.py的DEBUG设置为True时,你的404视图将永远也不会被使用。将会被一些调试信息取代

    500错误:
      默认使用django.views.defaults.server_error来处理。必须提供一个500.html文件。不同的是,500处理

    视图不会传递任何参数到模板中。
      自定义500错误处理视图使用:
      handler500='mysite.myview'

    403错误,同404和500错误处理方法
    默认处理视图django.views.defaults.permission_denied

  • 相关阅读:
    forEach 终止循环
    js 解决引用赋值修改新数组导致原数组跟着改变的问题
    es6判断数组是否包含某个元素
    tab css 切换效果
    js对象赋值影响原对象
    小程序返回上个页面 修改上个页面的数据
    小程序 scroll-view scroll-x 不生效
    proxy跨域处理
    常用Dos操作指令
    django全文检索
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145094.html
Copyright © 2011-2022 走看看