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

在Django clean方法之后但在提交之前发生了什么?

在Django的clean方法之后但在提交之前,会发生以下几个步骤:

  1. 数据验证:在clean方法中,我们可以对表单数据进行验证和清洗。如果验证失败,Django会返回错误信息,提示用户输入正确的数据。
  2. 数据准备:在验证通过后,Django会将表单数据准备好,以便进行提交。这包括将数据转换为适当的类型、处理关联关系等。
  3. 事务处理:在提交之前,Django会开启一个数据库事务。这意味着如果在提交过程中发生错误,所有的数据库操作都会被回滚,以保持数据的一致性。
  4. 数据库操作:在事务处理完成后,Django会将准备好的数据保存到数据库中。这包括插入新的记录、更新已有的记录或删除不需要的记录。
  5. 提交事务:如果所有的数据库操作都成功完成,Django会提交事务,将数据永久保存到数据库中。这样,数据就可以在后续的请求中被读取和使用。

总结起来,Django的clean方法之后但在提交之前,主要包括数据验证、数据准备、事务处理、数据库操作和提交事务等步骤。这些步骤确保了数据的有效性和一致性,以及将数据保存到数据库中。对于Django开发者来说,理解这些步骤可以帮助他们更好地处理表单数据和数据库操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2017年9月6日

装饰器,但是个别方法想不用事务, 只需要在方法上加上 @transaction.non_atomic_requests即可 整个方法上开启事务可以方法上加 @transaction.atomic 代码块上加事务可以用...不可以with里面加捕获那样会掩盖异常造成不会滚。 5. rollback不会保证model的状态回到之前的状态,这个需要手动恢复原来的状态。...如果想在commit之后做一些操作,可以使用 transaction.on_commit(func),该方法会在事务提交之后执行,回滚的话不执行。...8.with会开启一个savepoint保存点,oncommit是保存点之后注册的,也就是with里面。with里面如果成功了就提交然后执行oncommit注册的方法, 要不就是回滚到保存点。...9.django的测试TestCase中,测试方法开启一个事务,并在执行完后回滚,所以里面的on_commit注册的方法总不会被执行。

95460

Django学习-第十三讲(下):表单(一)forms.form、forms.modelform

2.Django中表单使用流程 讲解Django表单的具体每部分的细节之前。我们首先先来看下整体的使用流程。...这样就可以生成一个表单了 2.1. django 表单常用的Field 使用Field可以是对数据验证的第一步。你期望这个提交上来的数据是什么类型,那么就使用什么类型的Field。...对某个字段进行自定义的验证方式是,定义一个方法,这个方法的名字定义规则是:clean_fieldname。如果验证失败,那么就抛出一个验证错误。...return telephone 以上是对某个字段进行验证,如果验证数据的时候,需要针对多个字段进行验证,那么可以重写clean方法。比如要在注册的时候,要判断提交的两个密码是否相等。...clean没有问题后才能使用,如果在clean之前使用,会抛出异常。

3.2K40
  • Django之Form组件

    一 Form介绍   我们之前HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。   ...页面都会提示        -->用户提交校验功能       当用户输错之后 再次输入 上次的内容还保留在input框   -->保留上次输入内容 二 Form常用字段与插件   创建Form类时,...局部钩子     我们Fom类中定义 clean_字段名() 方法,就能够实现对特定字段进行校验。     ...# 定义局部钩子,用来校验username字段,之前的校验股则还在,给你提供了一个添加一些校验功能的钩子 def clean_username(self): value...类中定义 clean() 方法,就能够实现对字段进行全局校验,字段全部验证完,局部钩子也全部执行完之后,执行这个全局钩子校验。

    1.1K20

    关于“Python”的核心知识点整理大全64

    2处,我们将DEBUG设置为False,让Django不在错误发生时显示敏感 信息。...2处显示的状态表明我们仓库的分支master上工作,当前没有任何未提交的修改。推送到Heroku之前,必须检查状态并看到刚才所说的消息。...这样的结果非常理想,你接着开 这个项目时,将看到信息丰富的错误消息,但用户看不到有关项目代码的重要信息。...本地查看错误页面 将项目推送到Heroku之前,如果你要在本地查看错误页面是什么样的,首先需要在本地设 置中设置Debug=False,以禁止显示默认的Django调试页面。...使用方法get_object_or_404() 现在,如果用户手工请求不存在的主题或条目,将导致500错误。Django尝试渲染请求的页 面,但没有足够的信息来完成这项任务,进而引发500错误。

    9810

    多对多关系表的创建方式、forms组件

    #好处:可以任意的添加和修改第三张表中的字段,支持orm跨表查询 #不足:不支持add、remove、clear、set forms组件 小例子 需求:1.写一个注册页面获取用户输入的用户名和密码,提交到后端之后...forms之前,我们需要先定义一个类: from django import forms class MyForm(forms.Form): username = forms.CharField...type="submit"> 数据的校验通常前后端都必须有,但前端的校验若不经风,所以后端必须有校验,上面的forms浏览器会默认在前端对数据进行校验,我们需要先禁止浏览器的校验功能,方法..._clean_fields() self._clean_form() self._post_clean() 下面我们来分别看这三个部分分别有什么功能 self...._post_clean()里面没有内容,我们的源码之旅到此结束。 通过看源码我们发现局部钩子和全局钩子分别通过反射和对象属性方法的查找顺序两种方式实现的自动调用。

    5.2K00

    Django的form,model自定制

    执行Form组件的clean_form方法进行整体验证!(既然每个字段都验证了,就可以对用户提交的数据做整体验证了!...比如进行联合唯一的验证) 最后执行类似 clean_form的post_clean方法结束验证。...(一般不使用post_clean做自定义过滤,clean_form方法完全可以解决) form表单提交验证 form表单(会发起 get)提交刷新失去上次内容 from django.shortcuts...由于form表单submit之后(发送post请求) 数据提交到 后端,不管前端输入的数据是否正确,服务端也要响应,所以页面会刷新; 所以无法保留用户上次输入的内容;如何解决呢?...标签 把这个实例化之后的对象传到前端显示,让用户输入值;用户输入值通过post方法提交到后台。

    2.5K10

    如何确保用户创建的HTML模板安全

    1、问题背景我想要允许用户创建一些小的模板,然后使用Django预定义的上下文中渲染它们。假设Django的渲染是安全的(我之前问过这个问题),但仍然存在跨站攻击的风险,我想防止这种攻击。...我看到以下可能的解决方案:允许用户使用HTML,但在最后一步手动过滤掉危险的标签(比如总结一下:有没有什么安全且简单的方法来“净化”HTML,以防止XSS,或者有没有一种相当普遍的标记语言可以提供对布局和样式的某些控制...;'clean_html = purifier.purify(dirty_html)print(clean_html)2....使用专有的标记语言如果以上方法都不适合你,你也可以创建一个专有的标记语言。但是,这需要花费更多的时间和精力。5....使用Django模板过滤器Django中还提供了一些模板过滤器,可以用来净化HTML代码。这些过滤器可以模板中使用,也可以视图中使用。

    10110

    Django后端如何限制上传文件大小

    Django中,对上传文件大小进行限制可以通过几种不同的方法来实现。这包括表单层面、视图层面或通过设置Django项目的全局配置。...以下是一些常用的方法方法 1: 使用Django设置限制文件大小 Django的settings.py文件中,你可以设置DATA_UPLOAD_MAX_MEMORY_SIZE来限制上传文件的大小(...方法 2: 表单的clean方法中自定义文件大小检查 你可以表单中覆写clean_方法clean方法来添加自定义的文件大小检查逻辑。...: form = UploadFileForm() return render(request, 'upload_file.html', {'form': form}) 这个方法允许你文件实际被保存或进一步处理之前检查其大小...每种方法都有其适用场景,你可以根据实际需求选择最合适的方法。不过,通常在表单层面进行文件大小检查是一个不错的选择,因为这样可以提供更好的用户体验,用户提交表单时就能得到即时的反馈。

    27611

    011:Django高级表单

    本章知识点 1、Django表单类 2、自定义文件上传 3、Ajax post数据 知识点讲解 1、Django表单类 普通表单只能做到前端验证,为了安全,我们不得不编写对应的后端验证,这样工作量很大...用户名 符号开头 长度大于 密码 复杂度 Django为此编写了form表单类,但是django 1版本之前,form类被称为上帝的类,后来为了弥补, django1版本之后,1.4之前推出了forms...,1.4之后,二者合并称为现在的forms 1、定义form类 2、调用form类 3、Form类的基础操作 注意:form表单不会携带form头部和提交按钮,是为了提供纯粹的form...前端的字段也可以循环 5、视图 表单调用 表单校验 1、将post数据传入表单实例 2、校验数据 Is_valid 如果校验通过 返回True 否则False 3、获取校验后的数据 Clean_data...4、数据处理(存入数据库) 本章总结 Django表单类 自定义文件上传 Ajax post数据

    30220

    Django学习笔记之Django Form表单详解

    实际应用中,一个表单可能包含几十上百个字段,其中大部分需要预填充,而且我们预料到用户将来回编辑-提交几次才能完成操作。 我们可能需要在表单提交之前浏览器端作一些验证。...这个时候,让Django 来为我们完成大部分工作是很容易的。 so,两个突出优点:     1 form表单提交时,数据出现错误,返回的页面中仍可以保留之前输入的数据。    ...我们调用表单的is_valid()方法;如果它不为True,我们将带着这个表单返回到模板。这时表单不再为空(未绑定),所以HTML 表单将用之前提交的数据填充,然后可以根据要求编辑并改正它。...发送HTTP 重定向给浏览器告诉它下一步的去向之前,我们可以用这个数据来更新数据库或者做其它处理。 模板 我们不需要在name.html 模板中做很多工作。...字段的数据 不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。

    4.6K10

    一篇文章带你了解Django Form组件(入门篇)

    什么需要Form组件 注:Form组件,只适用于,前后端未分离的项目中,主要用于验证表单数据,所以,关键字是表单!!! 比如像哔哩哔哩的注册界面。 ?...跳转之后 ? 如果填写的信息错误。 填写信息 ? 错误提示 ? 小总结 但是你发现虽然能把错误信息显示出来。 但是我原来填写的东西没了啊!!!...Form组件版注册 再使用之前,需要将Django项目的settings.py的LANGUAGE_CODE设置为zh-hans ? 代码 以下代码可能看不懂,大概理解就好!...小总结 这是我点击提交之后报错的结果! 可以发现,即使刷新页面提交,还是会把原来的数据保存下来,并且还有验证失败的信息! Form总结 从上述示例可以发现。...Django Form组件最起码具有以下功能: 生成HTML标签。 验证提交的数据。 保留提交之前的数据。 没错,它的主要功能其实也就是这。

    66541

    登录注册小案例实现(使用Django中的form表单来进行用户输入数据的校验)

    之前我对其进行校验都是直接在视图函数中使用if进行,确实可以,但是有B格吗?没有,所以咱不那样干了这次!...(1)纯理论来讲讲form表单: ①form表单的引入: 登录页面和注册页面都会用到form表单来提交数据 当数据提交到后台后,需要在视图函数中去验证数据的合法性. django中提供了一个form表单的功能...使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到....(2)本案例中实战使用这个form表单: 在此名为mucis的app下创建forms.py的文件,编写表单校验(用户登录和注册的数据校验): from django import forms from...form = LoginForm(data) # 将获取到的参数传入RegisterForm类, if form.is_valid(): # 用is_valid()方法验证提交数据的合法性

    4.4K00

    Python进阶32-Django forms组件

    "> 神奇的事情发生了,我们删除了input框,结果页面上还有,并且...还在input框里添加了字段的限制规则,并且直接点提交,还能提示我,我擦嘞~~~...myform = MyForm(request.POST) return render(request, 'index3.html', locals())  局部钩子 ---- 需求 如下图,注册的时候...,输入用户名,匹配数据库,如果存在则返回错误信息,登录用户名已被使用  ---- 添加新方法 from django.shortcuts import render, HttpResponse,...重写clean方法 ---- 添加新方法 from django.shortcuts import render, HttpResponse, redirect from django.http import...正常需要这么传入,我们可以直接传入字典 models.User.objects.create(**myform.cleaned_data) ## 创建成功之后

    98820

    Django学习之八:forms组件【对

    下面就来使用它的属性和方法吧: field.label 是label值,不包括label标签 field.label_tag() 就是一个返回label标签的方法,包含了label值;渲染标签是指定参数...modelform对象层面和ModelChoiceField层面,进行数据绑定和数据clean()校验是不同的。...这个转化过程肯定也是要有依据的,得按照依据规则来,不可能用户随便输入什么字符都能转换换成date对象是吧。所以这个字段初始化时,需要一个可选参数就是input_formats。...由于这个时间格式的表示范式,全球各地是不同的,所以会根据整个django项目的F10N参数,来判定默认的input_formats规则是什么。...记住这个方法,对于容易忘记全局钩子错误的KEY是什么的人,是福利。 form.cleaned_data 得到校验干净的数据,数据会格式化为对应的python对象类型。

    2.2K30

    XSS攻击

    他的原理是用户使用具有XSS漏洞的网站的时候,向这个网站提交一些恶意的代码,当用户访问这个网站的某个页面的时候,这个恶意的代码就会被执行,从而来破坏网页的结构,获取用户的隐私信息等。...XSS攻击防御:如果不需要显示一些富文本,那么渲染用户提交的数据的时候,直接进行转义就可以了。Django的模板中默认就是转义的。...也可以把数据存储到数据库之前,就转义再存储进去,这样以后渲染的时候,即使不转义也不会有安全问题,示例代码如下: from django.template.defaultfilters import...这个方法是可行的,包括很多线上网站也是这样做的,Python中,有一个库可以专门用来处理这个事情,那就是sanitizer。接下来讲下这个库的使用。...想要使用这个库,可以通过以下命令进行安装:pip install bleach这个库最重要的一个方法是bleach.clean方法,bleach.clean示例代码如下:import bleachfrom

    71830

    Django之forms组件

    一、校验数据功能   我们写注册页面时,之前只是提交了数据,然后就保存了数据,后端根本就没有对数据进行校验,比如价格写的不是纯数字也让保存,这肯定是不行的,在前端是可以校验的,但我们不能只依靠前端验证...现在注册页面要向我提交三个数据,用户名、密码、邮箱,当它提交过来后,首先我要对数据进行校验,根据数据的校验结果然后再决定保存还是给前端返回错误信息。   ...  1,方法一 from django.forms import Form from django.forms import widgets from django.forms import fields...max_length=20,label='密码') r_pwd=forms.CharField(max_length=20,label='确认密码')   下面的局部钩子,必须在上面的对应的过滤条件通过之后...""" Form中字段中定义的格式匹配完之后,执行此方法进行验证 :return: """ value =

    2.2K10

    Postgresql源码(27)为什么事务提交会通过delayChkpt阻塞checkpoint

    Postgresql事务事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,下面分析为什么需要这样做? 不这样做会有什么问题。...确定REDO位点是createCheckpoint的函数前面执行的,checkpoint和事务提交并发会有下面三种情况发生(假设没有delayChkpt会有情况二生) 情况一:redo point...commit提交前,那么如果crash发生了,redo过程会覆盖这条xlog,不会有问题 情况二:如果没有delayChkpt,redo point可能发生在上图中的位置(然后checkpoint...然后呢,检查点拿了redo位点之后刷数据包括clog,但是数据都刷完了,事务X的clog才写下去。...情况三:redo point事务提交后,redo时xlog虽然还是做不到,但是clog一定会被刷下去,所以我们不会丢失事务提交信息。

    37630

    python3.4 + Django1.7.7 表单的一些问题

    django 的表单,提交上来之后是这样的: #coding: gb2312 from django import forms class ContactForm(forms.Form): subject...非必要字段 message = forms.CharField(widget=forms.Textarea,label='message')#指定form中组件的类型 #自定义校验规则,该方法在校验时被系统自动调用...,次序“字段约束”之后 def clean_message(self): message = self.cleaned_data['message']#能到此处说明数据符合“字段约束...label='Email')#非必要字段 其实可以作为非必要字段,required=False 由于调用form.cleaned_data#只有各个字段都符合要求时才有对应的cleaned_data,之前好像必须得...: if form.is_valid():#说明各个字段的输入值都符合要求 所以上述字段required=False,测试东西或者自己写东西,等安全性不高的场合就比较必要了 #coding: gb2312

    55830
    领券