首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django 1.8 官方文档翻译: 3-1-2 编写视图

Http404异常 class django.http.Http404 当你返回一个像HttpResponseNotFound这样的错误时,它会输出这个错误页面的HTML作为结果: return HttpResponseNotFound...('Page not found') 为了便利起见,也因为你的站点有个一致的404页面是个好主意,Django提供了Http404异常。...如果你在视图函数中的任何地方抛出Http404异常,Django都会捕获它,并且带上HTTP404错误码返回你应用的标准错误页面。...如果你在抛出Http404异常时提供了一条消息,当DEBUG为True时它会出现在标准404模板的展示中。你可以将这些消息用于调试;但他们通常不适用于404模板本身。...自定义错误视图 Django中默认的错误视图对于大多数web应用已经足够了,但是如果你需要任何自定义行为,重写它很容易。只要在你的URLconf中指定下面的处理器(在其他任何地方设置它们不会有效)。

56030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    让你的Django应用变DRY的几个最佳实践

    如果你想接入第三方登录,OAuth登录,都应该自定义一个Backend,无需继承任何基类,只需实现一个authenticate方法,该方法参数与django.contrib.auth.authenticate...要达成这种效果,大致有两种途径: 写自定义中间件,修改响应格式 写自定义renderer 这里第一种途径有几处劣势: 在中间件处理时rest_framework.response.Response已完成渲染...,修改内部数据不起作用 若重新构造一个rest_framework.response.Response则会报未渲染错误,而渲染过程比较复杂 若选择用django.http.response.JSONResponse...我们经常会需要抛出异常,有些是主动抛出、有些是未捕获的异常,在这些情况下,我们都希望日志记录异常的堆栈信息,然后返回一个规范的响应(格式与上一节中一致),这样我们就需要更改异常处理。...在Django+DRF中异常处理有两个重载点: 中间件中的process_exception函数 DRF的EXCEPTION_HANDLER配置 而其中EXCEPTION_HANDLER的作用时间早于中间件

    1.7K50

    Django debug page XSS漏洞(CVE-2017-12794)分析

    0x01 补丁分析 因为官方说明是500页面中出现的BUG,所以我们重点关注的就是django/views/debug.py。...:一般是在出现数据库异常的时候,会抛出这样的错误语句。...我们可以做个简单的测试,在Django命令行下,我们创建一个username为phith0n的用户,然后再次创建一个username为phith0n的用户,则会抛出一个IntegrityError异常:...这是为了方便开发者进行SQL错误的调试,因为Django的模型最终是操作数据库,数据库中具体出现什么错误,是Django无法100%预测的。...0x03 漏洞复现 经过我的测试,我发现在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。

    1.6K41

    Python 工匠: 异常处理的三个好习惯

    一个错误码返回大概长这个样子:图片在制定好错误码规范后,接下来的任务就是如何实现它。当时的项目使用了 Django 框架,而 Django 的错误页面正是使用了异常机制实现的。...所以,我们很自然的从 Django 获得了灵感。首先,我们在项目内定义了错误码异常类:APIErrorCode。然后依据“错误码规范”,写了很多继承该类的错误码。...为了偷懒,我让函数直接抛出 APIErrorCode 异常来完成了错误处理工作。再来说当时的问题。...Django API 根本没有任何关系这就是异常类抽象层级不一致导致的结果。...但是在退出上下文时,会判断当前上下文中是否抛出了类型为 self.captures 的异常,如果有,就用 APIErrorCode 异常类替代它。

    71310

    08.Django基础六之ORM中的锁和事务

    这样的话,即便内部代码块正常运行,如果外部代码块抛出异常的话,它也没有办法把它的修改提交到数据库中。     ...如果在atomic代码块里面捕捉并处理了异常,就有可能隐盖代码本身的错误,从而可能会有一些意料之外的不愉快事情发生。...如果这种异常真的发生了,事务就会被破坏掉,而Django会在代码运行完后执行回滚操作。如果你试图在回滚前执行一些数据库操作,Django会抛出TransactionManagementError。...通常你会在一个ORM相关的信号处理器抛出异常时遇到这个行为。 捕获异常的正确方式正如上面atomic代码块所示。如果有必要,添加额外的atomic代码块来做这件事情,也就是事务嵌套。...像试图提交、回滚事务,以及改变数据库连接的自动提交状态这些操作,在atomic代码块中都是不予许的,否则就会抛出异常。

    2.2K40

    Python 工匠: 异常处理的三个好习惯

    你可能会觉得:异常是一种不好的东西,好的程序就应该捕获所有的异常,让一切都平平稳稳的运行。而抱着这种想法写出的代码,里面通常会出现大段含糊的异常捕获逻辑。...当时的项目使用了 Django 框架,而 Django 的错误页面正是使用了异常机制实现的。...所以,我们很自然的从 Django 获得了灵感。首先,我们在项目内定义了错误码异常类:APIErrorCode。然后依据“错误码规范”,写了很多继承该类的错误码。...为了偷懒,我让函数直接抛出 APIErrorCode 异常来完成了错误处理工作。 再来说当时的问题。...但是在退出上下文时,会判断当前上下文中是否抛出了类型为 self.captures 的异常,如果有,就用 APIErrorCode 异常类替代它。

    75140

    三个好习惯,帮你写好Python里的异常处理

    而抱着这种想法写出的代码,里面通常会出现大段含糊的异常捕获逻辑。...当时的项目使用了 Django 框架,而 Django 的错误页面正是使用了异常机制实现的。...所以,我们很自然的从 Django 获得了灵感。首先,我们在项目内定义了错误码异常类:APIErrorCode。然后依据“错误码规范”,写了很多继承该类的错误码。...但是在退出上下文时,会判断当前上下文中是否抛出了类型为 self.captures 的异常,如果有,就用 APIErrorCode 异常类替代它。...最后再总结一下要点: 只捕获可能会抛出异常的语句,避免含糊的捕获逻辑 保持模块异常类的抽象一致性,必要时对底层异常类进行包装 使用“上下文管理器”可以简化重复的异常处理逻辑

    1.2K20

    Django-djangorestframework-异常模块-源码及自定义异常

    目录 异常模块 为什么要自定义异常模块 常见的几种异常情况 异常模块源码分析 自定义 drf 异常处理 异常模块 为什么要自定义异常模块 所有经过 drf APIView 视图类产生的异常,都可以提供异常处理方案...(方便事后排查) 如果程序报错了,我们应该尽可能的隐藏后台的错误,返回给前台就是服务器错误(你返回给用户用户也看不懂呀,如果是黑客,那可能还会利用报错袭击服务器) 常见的几种异常情况 像这种就比较可怕了...drf 异常处理模块处理后的异常 ? drf 异常处理模块处理后的异常 ? 异常信息经汉化后的报错(django 配置了国际化后) ?...异常模块源码分析 视图函数执行出现异常会自动触发 handle_exception 函数 每个请求都会经历这么一个过程,走到 dispatch 函数 E:/python3-6-4/Lib/site-packages...if response is None: self.raise_uncaught_exception(exc) # 乱七八糟的异常就是这里抛出来的

    1.4K10

    Django来敲门~第一部分【6.2 HTML视图模板】

    如果修该浏览器中的id编号,会出现如下的异常 ?...处理异常 页面出现的异常情况,我们有一些特殊的状态处理方式,如常规情况下在HTTP协议中有一些特殊的状态编码,如404表示访问的资源不存在,500表示服务器内部错误等等,在Django中,我们也可以这么干...首先,捕获到用户访问的数据不存在的异常,然后抛出一个异常对象 改造polls/views.py中的detail函数如下: from django.http import Http404 # 问题详情函数...有就返回数据,没有就返回404,针对两种结果,django封装了一个好玩的函数来进行处理 # 获取对象,如果对象不存在就抛出404异常 get_object_or_404() 我们改造一下detail视图处理函数...补充:关于开发模式和生产模式 在我们目前的章节中,默认是使用开发模式【就是适合代码开发的软件环境,有更多的错误提示信息】,包括页面的展示也是使用的开发模式的错误提示 在进行项目发布时,需要将开发模式转换成生产模式

    99920

    Django 笔记-1-从请求到响应

    加载配置 Django 的配置都在 {project_name}/settings.py 中定义,可以是 Django 的配置,也可以是自定义的配置,并且都通过 django.conf.settings...Exception 对象; 调用时间:当一个视图抛出异常,Django 会调用 process_exception 来处理; 产生响应:它应该返回一个 None 或一个 HttpResponse 对象...当 Django 遍历执行完 _request_middleware 后会得到一个经过处理的 request 对象,此时 Django 将按顺序进行对 url 进行正则匹配,如果匹配不成功,就会抛出异常...url_patterns,跳至 5;匹配失败,抛出异常; 匹配 url_patterns:若为 urlpattern 匹配成功,返回 ResolverMatch;若为 URLResolver 递归调用...总述 真实的请求响应过程肯定是比我提到的这些还要复杂的多,但是我的能力实在有限,目前仅能理解到这个层面了,如果错误欢迎指正。

    87821

    drf序列化器之反序列化的数据验证

    验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误提示。...BookInfoSerializer(data=request.POST) # 启动验证 # is_valid 有个可选参数raise_exception,用于显示序列化器抛出的异常...方法名必须固定为validate_字段,这里的data代表的就是字段值, if "测试" in data: """抛出异常""" raise serializers.ValidationError...6、小结 is_valid实际上内部执行了三种不同的验证方式: 先执行了字段内置的验证选项 在执行了validators自定义选项 最后执行了validate自定义验证方法[包含了validate_时,显示的字段名称 help_text 用于HTML展示API页面时,显示的字段帮助提示信息

    2.1K30

    【Django】 开发:补充知识

    InvalidPage异常 Paginator异常exception InvalidPage:总的异常基类,包含以下两个异常子类 PageNotAnInteger:当向page()传入一个不是整数的值时抛出...InvalidPage 异常 previous_page_number ():返回上一页的页码,如果上一页不存在,抛出 InvalidPage 异常 len ():返回当前页面对象的个数 说明: Page...404.html 仅在发布版中 (即 setting.py 中的 DEBUG=False 时) 才起作用 当向应处理函数触发 Http404 异常时就会跳转到 404 界面 from django.http...import Http404 def xxx_view( ): raise Http404 # 直接返回404 邮件告警 报错邮件中会显示一些错误的追踪,这些错误追踪中会出现如 password...等敏感信息,Django已经将配置文件中的敏感信息 过滤修改为 多个星号,但是用户自定义的视图函数需要用户手动过滤敏感信息 1,视图函数中的局部变量 from django.views.decorators.debug

    6.4K30

    Django中间件看完这篇彻底明白

    我们在使用python的一些库时,会遇到中间件这个概念,比如scrapy和Django,那么什么是中间件呢?...中间件执行流程 在Django中自定义中间件是非常简单的,在settings.py中有一个配置项: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware...中间件函数执行流程 请求到达中间件后先依次执行每个中间件的process_request函数 然后再依次执行每个中间件的process_view函数,找到我们的视图函数 执行视图函数处理请求数据 如果在上面的过程中出现异常...Exception函数:process_exception(self, request, exception) 执行时机:如果在执行过程中出现问题,并且抛出一个未被捕获的异常时才被调用。...我们可以用它来捕获请求错误,发送通知或者恢复错误场景。

    4K20

    四、其它(一)ModelAdmin对象InlineModelAdmin对象重写admin模板Paginator对象Page对象示例

    ,在每个请求上调用,返回一个HttpResponse对象 使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法 示例:自定义异常处理 与settings.py同级目录下创建myexception.py...,则会运行自定义的异常处理 三、上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为...InvalidPage异常 异常exception InvalidPage:当向page()传入一个无效的页码时抛出 PageNotAnInteger:当向page()传入一个不是整数的值时抛出 EmptyPage...:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出 Page对象 创建对象 Paginator对象的page()方法返回Page对象,不需要手动构造 属性 object_list:当前页上所有对象的列表...InvalidPage异常 previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常 len():返回当前页面对象的个数 迭代页面对象:访问当前页面中的每个对象

    4.5K20
    领券