DAY80-Django框架(十)

一、事务

​ 当你对两条记录操作,第一条记录成功,但是第二条失败的话,应该把之前的操作无效化,进行回滚。

语法

from django.db import transaction
with transaction.atomic():
    #写数据操作,一旦发生异常就回滚到上方

二、模型层补充之choice

class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    #在模型表定义变量choicess
    choicess=((1,'男'),(2,'女'),)
    sex = models.IntegerField(choices=choicess)
    
    
#在视图层get_字段名_display(),1转换为男显示,2转换为女显示
author.get_sex_display()

三、数据库优化之defer和only

#only:取指定的字段,返回值是queryset里套对象,只有指定的字段
#defer:取指定的字段以外的,返回值是queryset里套对象,只有指定以外的字段

#只会获得name字段
models.Author.objects.only('name')
#都是取得所有的,然后只显示name
models.Author.objects.all().value('name') | .filter('name')

#减少对数据库的压力

四、模板层之inclusion_tag

1.先注册app

2.在app下创建一个templatetags的模块

3.在模块下新建一个py文件

my_tags.py

from django.template import Library

register=Library()#名字必须叫register

#使用装饰器:@register.inclusion_tag()
@register.inclusion_tag('result.html')
def show_results(n):
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}
    #返回字典

4.模板里就能取到字典,渲染模板

模板:result.html

<ul>
  {% for choice in data %}
    <li>{{ choice }}</li>
  {% endfor %}
</ul>

5.使用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>inclusion_tag test</title>
</head>
<body>
 <!-- 加载my_tags.py-->
{% load my_tags %}
 <!-- 使用,传入参数-->  
{% show_results 10 %}
</body>
</html>

转载于:https://www.cnblogs.com/xvchengqi/p/9971457.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值