FormView 提交From 网站联系我们或emai订阅form CreateView 创建对象 创建新文章页 UpdateView 更新对象 修改文章页 DeleteView 删除对象 删除文章页...参数,如果找到了这个参数,该方法使用这个参数的值执行一个基于逐渐的查询.如果这个参数没有找到,该方法查找slug_url_kwarg参数,使用slug_field字段执行针对slug的查询.当query_pk_and_slug...为True时,get_object()将使用主键和slug执行查询....方法: get_success_url():决定在表单成功验证后重定向到的URL,默认返回success_url. form_valid(form):在表单验证成功后调用该方法(注意并没有对数据进行操作...显示确认页面并删除现有对象的视图.仅当请求方法为POST时,才会删除给定的内容.如果此视图是通过GET提取的,它将显示一个确认页面,其中包含POST到同一网址的表单.
所以各种各样的url地址,带参数跳转的,表单提交的,混为一谈,制作出符合统一规范的路由很不容易。...以及slug字段对应的数据库表的字段来源,此处是 name 字段。 接着我们需要修改 events 表,为其追加 slug 字段。...当然了,如果没有使用路由参数绑定,eloquent-sluggable类库也为我们提供了友好的trait,在模型文件内直接引入就好了: use Cviebrock\EloquentSluggable\Sluggable...’ 字段,所以SQL查询仍然是根据slug字段严格匹配约束返回数据集。...数据量大了之后,这种等于的WHERE子句性能必然不如ID字段的主键索引来的快。所以在数据库层面也同样需要优化。
参数,如果找到了这个参数,该方法使用这个参数的值执行一个基于逐渐的查询.如果这个参数没有找到,该方法查找slug_url_kwarg参数,使用slug_field字段执行针对slug的查询.当query_pk_and_slug...为True时,get_object()将使用主键和slug执行查询....方法: get_success_url():决定在表单成功验证后重定向到的URL,默认返回success_url. form_valid(form):在表单验证成功后调用该方法(注意并没有对数据进行操作...显示确认页面并删除现有对象的视图.仅当请求方法为POST时,才会删除给定的内容.如果此视图是通过GET提取的,它将显示一个确认页面,其中包含POST到同一网址的表单....不过点击Update后会有一个报错: 191989-055d8b7a362f2603.png 意思是新增后修改完成后我们没有定义一个redirect的url去跳转。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。...不用刻意维护 ---- 3.页分裂容易维护,当插入数据的当前页快满时,会发生页分裂的现象,如果主键索引不为自增 id,那么数据就可能从页的中间插入,页的数据会频繁的变动,「导致页分裂维护成本较高」...「验证权限」,验证是否有该表的查询权限 没有则返回无权限的错误 有则执行第六步 6.通过执行器调用存储引擎执行该 sql,然后返回「执行结果」 ---- 5. 什么是索引?...,在 where 条件中出现的字段,「如果只有组合索引中的部分列,则这部分列的触发索引顺序」,是按照定义索引的时候的顺序从前到后触发,最左面一个列触发不了,之后的所有列索引都无法触发。...「读未提交」:即能够「读取到没有被提交」的数据 ---- 3.「可重复读」:可重复读指的是在一个事务内,最开始读到的数据和事务结束前的「任意时刻读到的同一批数据都是一致的」 ---- 4.
分裂后插入↓ 重新设置指针↓ 页合并: 当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。...当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。...-- 优化前: select * from tb_sku limit 2000000,10; -- 优化后 -- 子查询的id字段存在主键索引,order by性能得到优化 -- 根据子查询的到的主键字段...②count(主键) InnoDB引擎会遍历整张表,把每一行的主键id值都取出来,返回给服务层。服务层拿到主键后,直接按行进行累加(主键不可能为NULL)。...③count(字段) **没有not null约束:**InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加。
(2)防止已存在的数据,更新成间隙内的数 Next-key Lock: 行锁+gap锁。 如何解决数据库死锁 预先检测到死锁的循环依赖,并立即返回一个错误。...丢失修改:两个事务对同一个表的同一个数据进行修改,可能一个修改后的提交会覆盖另一个的修改。 脏读:当前事务可以查看到别的事务未提交的数据。...通过参数设置sync_binlog为0的时候,表示每次提交事务都只write,不fsync。此时数据库崩溃可能导致部分提交的事务以及binlog日志由于没有持久化而丢失。...binlog没有记录数据页修改的详细信息,不具备恢复数据页的能力。binlog记录着数据行的增删改,但是不记录事务对数据页的改动,这样细致的改动只记录在redo log中。...MySQL数据存储过程 一般来说,普通的SQL语句需要先编译然后执行,而存储过程可以理解为为了完成特定功能的已经编译后的SQL语句集。用户可通过存储过程的名字并给定参数来调用。
1)首先如果不建立的话,它会从数据列中找出全部不同的一列作为主键,如果找不到会创建一个隐藏列作为主键。那么既然会有隐藏列列了,干脆直接创建就好。 ...其次新行的主键值不一定比之前的主键值大,所以innoDb无法做到总是把新行插入到索引的最后,而需要为新行寻找合适的位置来分配新的空间,这个过程会导致: 【1】写入的目标页可能从缓存上移除了,或者还没有加载到缓存上...之间的随机数;如果有参,返回参数X的四舍五入的一个整数。...,如select count(*) [不建议使用,效率低] min() //可以为数值字段、字符字段或表达式列做统计,返回最小值 max() //可以为数值字段,字符字段或表达式列作统计,返回最大的值...页结构分为文件头(前38字节),页数据和文件尾(后8字节)。
「验证权限」,验证是否有该表的查询权限 没有则返回无权限的错误 有则执行第六步 6.通过执行器调用存储引擎执行该 sql,然后返回「执行结果」 5.使用 Innodb 的情况下,一条更新语句是怎么执行的...id 是主键,引擎直接用树搜索找到这一行 如果 id=2 这一行所在的数据页本来就「在内存中」,就「直接返回」给执行器 「不在内存」中,需要先从磁盘「读入内存」,然后再「返回」 2.执行器拿到引擎给的行数据...先写 redolog 后写binlog。假设在 redolog 写完,binlog 还没有写完的时候,MySQL 进程异常重启,这时候 binlog 里面就没有记录这个语句。...比如: select id from t where age = 1; id 为主键索引,age 为普通索引,age 这个索引树存储的就是逐渐信息,可以直接返回 14.什么是最左前缀原则?...17.事务的隔离级别? 1.「读提交」:即能够「读取到那些已经提交」的数据 2.「读未提交」:即能够「读取到没有被提交」的数据 3.
创建项目 你的第一个路由 加载数据(Loading Data) 一点小小的重构 从数据源拉取数据 动态路由参数 创建博客文章 根路由 提交表单 创建项目 初始化一个新的 Remix 项目 npx create-remix..., markdown }); return redirect("/admin"); }; 复制代码 不管我们是否使用 TS,当用户并没有输入表单字段的时候就进行提交将会有问题。...校验表单是否包含我们需要的数据,如果校验失败,则返回错误信息 //... export const action: ActionFunction = async ({ request }) => {..., markdown }); return redirect("/admin"); }; 复制代码 注意此时我们并没有返回 redirect 信息。...而是返回了错误信息。在组件中,这些信息可以通过 useActionData 进行访问。它跟 useLoaderData 很像。不过只是数据是在表单提交之后通过 action获取到的。
小数位数 # 举例来说, 要保存最大值为 999 (小数点后保存2位),你要这样定义字段: # #...你通常不需要直接使用这个字段; # 自定义一个主键:my_id=models.AutoField(primary_key=True) # 如果你不指定主键的话,系统会自动添加一个主键字段到你的...若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入且 # 没有返回404响应)....缺省为真 (5) primary_key:设置主键,如果没有设置django创建表时会自动加上: id = meta.AutoField('ID', primary_key=True)...非有效产生 django.core.validators.ValidationError 错误 (9) db_column,db_index :如果为真将为此字段创建索引 (10)choices:一个用来选择值的
经常会有使用我博客源码搭建好网站的人问我为啥后台文章编辑页面没有富文本编辑器也没有支持 markdown 编辑,不方便预览。...return obj 这里直接使用的内置的视图类,比较方便,然后就是在获取实例的时候需要进行用户判断,也就是非作者及超管无权访问,直接返回404页面就行。...,第一个参数是所有 django 的请求都应该带上的 csrf 验证,这个不清楚的可以去查一下相关作用,第二个参数是更新的接口地址,第三个参数是文章的 slug 字段,这个字段是唯一的,所以可以用来确定文章...可以看到这个函数里面当请求成功之后,会拿到返回接口里面的 callback 字段,这个就是返回文章的内容页面,也就是说更新文章成功自动跳回到文章内容页面。...本文更新的相关代码提交可见 github 提交历史:添加文章编辑页面,支持markdown编辑器编辑预览模式
每个页面包含了2-N行数据(如果一行数据很大,会行益处),根据主键排列 页合并 当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。...count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加,最后返回累计值 用法count(*)、count(主键)、count(字段)...服务层拿到主键后,直接按行进行累加(主键不可能为null) count(字段) 没有not null约束:InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为...当事务提交之后会把所有修改信息都会存到该日志中,用于在刷新脏页到磁盘时,发生错误时,进行数据恢复使用 架构-后台线程 Master Thread 核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中...当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用 undo log 回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MVCC(多版本并发控制
两个日志记录的顺序: 更新的行如果不在内存,从磁盘取出 -> 修改内存中的值 -> 写入redo-log状态为prepare -> 写binlog -> 提交事务redo-log进行commit 数据库的隔离级别...隔离级别通过视图实现,读未提交没有视图,读已提交每次sql执行创建一个视图,可重复读在开始之前创建一个视图,串行化直接加锁没有视图。...,非主键索引又叫二级索引 主键索引可以拿到全部数据,而非主键索引只能拿到主键id通过回表查询来拿到数据 如果一个数据页满了需要新增一个数据页也叫做页分裂性能下降并且空间利用率下降,所以使用自增主键更加合理...最左前缀原则:当我们进行一个字段查询的时候,如果这个字段没有单独做索引,但是有别的联合索引包含这个字段,且刚好以这个字段开头,那么也可以进行匹配。...预防才是关键: 把sql_safe_updates参数设置为on。
因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。 并发事务的问题?...因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。...不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。...将参数innodb_locks_unsafe_for_binlog设置为1 范式 第一范式: 无重复的列 第二范式: 实体的属性完全依赖于关键字,不能存在仅仅依赖于主键的部分属性 第三范式: 表属性不包含其他表的非主属性...区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数) 尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO 性能也就越好) 使用最频繁的列放到联合索引的左侧
主键索引的 B+Tree 如图所示(图中叶子节点之间我画了单向链表,但是实际上是双向链表,原图我找不到了,修改不了,偷个懒我不重画了,大家脑补成双向链表就行): 主键索引 B+Tree 通过主键查询商品数据的过程...我这里将前面的商品表中的 product_no (商品编码)字段设置为二级索引,那么二级索引的 B+Tree 如下图(图中叶子节点之间我画了单向链表,但是实际上是双向链表,原图我找不到了,修改不了,偷个懒我不重画了...以下是一些常用的top命令参数: -d :指定top命令刷新的时间间隔,默认为3秒。 -n :指定top命令执行的次数后自动退出。 -p :指定要监控的进程ID。...发送方发送数据时,需要等待接收方的确认应答,如果没有收到确认应答或者收到了错误的确认应答,就进行重传。 超时重传:发送方在发送数据后设置一个超时时间,如果在超时时间内没有收到确认应答,就进行重传。...403 Forbidden:服务器拒绝请求,没有访问权限。 404 Not Found:请求的资源不存在。 500 Internal Server Error:服务器内部错误。
migrate # 执行完会在数据库中产生Django所需的依赖表,自动创建的 # 自己创建的表user以'应用名_表名'的形式创建,app01_user ✨✨不指定id字段和主键等,ORM会自动创建...id # 如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段 class user(models.Model): username = models.CharField(max_length...# 1 hammer 18 # 或这下面这样提取列表数据也可以 user_obj = models.User.objects.filter(name=username).first() '''如果用户提交的信息不存在返回...P表达式)的方式传递参数。 path支持匹配的数据类型只有str,int, slug, uuid四种。...''' 有名分组 在使用路由的时候,正则表达式可以起别名,别名当作关键字参数传给视图函数; 没有按关键字参数写报错 按别名,传参 '''urls.py''' urlpatterns
d、系统参数max_write_lock_count设置一个合适的值;当一个表的读锁达到这个值后,MySQL便暂时将写请求的优先级降低,给读进程一定获得锁的机会 四、InNoDB存储引擎的锁 与InnoDB...,在同一事务中两次相同的查询数据是不同的(由于修改导致) (4)幻读:返回记录数不同(由于新增或者删除导致) 3、事务隔离级别 更新数据丢失不仅仅是数据库事务控制器解决,主要由应用解决。...用法:select * from 表名 where 字段名>参数**(在一个范围内)** for update; 使用范围条件而不是相等条件检索数据,InnoDB除了给索引记录加锁,还会给不存在的记录(...,其他事务就必须等待该事务处理完才可以处理那行数 2、乐观锁 乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息...,之后更新,版本号+1,提交数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据,重新读取数据 使用时间戳实现: 每一行数据多一个字段time 原理:读出数据,将时间戳一同读出,之后更新,提交数据时间戳等于数据库当前时间戳
验证失败,可以通过序列化器对象的 errors 属性获取错误信息,返回一个字典, 包含字段和字段的错误,若是非字段错误,可以通过修改 REST framework 配置中的 NON_FIElD_ERRORS_KEY...Response Response(data, status=None, template_name=None, headers=None, content_type=None) data: 为响应准备的序列化处理后的数据...filter_backends 过滤控制后端 详情页视图的使用 Lookup_field 查询单一数据对象使用的条件字段,默认为‘pk’ Look_url_kwarg 查询单一数据时 url 中的参数关键字名称...如果序列化器对前端发送的数据验证失败,返回400错误。...成功返回200,序列化器校验数据失败时,返回400错误。
当事务提交之后会把所有修改信息都会存到该日志中, 用于在刷新脏页到磁盘时,发生错误时, 进行数据恢复使用。...当事务提交之后会把所有修改信息都存到该日志文件中, 用于在刷新脏页到磁盘,发生错误时, 进行数据恢复使用。 如果没有redolog,可能会存在什么问题的? 我们一起来分析一下。...DB_ROLL_PTR 回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个版本。 DB_ROW_ID 隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。...而上述的前两个字段是肯定会添加的, 是否添加最后一个字段DB_ROW_ID,得看当前表有没有主键,如果有主键,则不会添加该隐藏字段。...,有一栏 columns,在其中我们会看到处理我们建表时指定的字段以外,还有额外的两个字段 分别是:DB_TRX_ID 、 DB_ROLL_PTR ,因为该表有主键,所以没有DB_ROW_ID隐藏字段。
第三个问题是幻读,事务T1对一个表的数据做了从“1”修改成“2”的操作,这时事务T2又对这个表插入了一条数据,而这个数据的值还是为“1”并且提交给数据库,操作事务T1的用户再查看刚刚修改的数据,会发现还有一行没有修改...第五步,开始执行的时候,要先判断一下你对这个表有没有执行查询的权限,如果没有,就会返回没有权限的错误。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。...mysql是从磁盘读取数据到内存的,是以磁盘块为基本单位的,位于同一磁盘块中的数据会被一次性读取出来,不是按需读取。...能用数字型字段就不要设计为字符型,因为字符型锁占的存储空间更大,比如,性别这个字段不用男女进行存储,改为0/1的方式,这样不仅可以控制数据量的大小,增加了同一高度下的B+树容纳的数据量,还能提高检索速度...如果没有定义主键,InnoDB会选择一个唯一的非空索引代替主键。如果没有唯一的非空索引,InnoDB会隐式定义一个主键来作为聚集索引。
领取专属 10元无门槛券
手把手带您无忧上云