1. 定义闭包(装饰器)
1
2
3
def is_longin(func):

def check_login(request):

如果登录, 返回函数func

1
2
3
ticket = request.COOKIES.get('ticket')

if not ticket:

如果没有登录, 跳转到登录页面

1
2
3
4
5
6
7
8
9
10
11
12
13
return HttpResponseRedirect(reverse('user:login'))

user = Users.objects.filter(ticket=ticket)

if not user:

# 如果没有登录, 跳转到登录页面

return HttpResponseRedirect(reverse('user:login'))

return func

return check_login

2.模板

1
2
3
4
5
6
7
8
9
10
11
在基础base.html中挖坑

{% block xxx %} {% endblock %}

在index.html页面中, 需要先继承{% extends 'base.html '%}

{% block xxx %} {% endblock %}

加载上一次填坑的内容

{% block.super %}

3.F/Q

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
last(): 最后一个

first() : 第一个


一对多:

多找一:

student.g.g_name

student.g.id

一找多:

grade.student_set.all()

一对一:

student.g.g_name

grade.student.all()

F(): 用于做计算

1
students.filters(s_yuwen__gt= F('s_shuxue') + 10)

Q - 用于过滤信息 |或者 &并且 ~取反

查询python班语文大于等于80或者数学小于等于80的学生

1
2
3
4
5
6
7
8
9
10
11
12
13
	grade = Grade.objects.filter(g_name='python').first()

students = grade.student_set.all()



stu = students.filter(Q(s_yuwengte=80) | Q(s_shuxue__lte=80))



查询python班语文小于80并且数学小于等于80的学生

stu = students.filter(~Q(s_yuwengte=80) & Q(s_shuxue__lte=80))

4.模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if

for

ifequal : 判断是否相等

forloop.counter : 循环, 从1开始

forloop.revcounter : 倒循环, 倒1结束



forloop.counter0 : 循环, 从0开始

forloop.revcounter0 : 倒循环, 倒0结束

Ctrl shift + Delete ----删除浏览器缓存

创建班级的模型

1
2
3
4
5
class Grade(models.Model):

g_name = models.CharField(max_length=20)

g_create_time = models.DateTimeField(auto_now_add=True)
1
2
class Meta:
db_table = 'grade'

创建学生的模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Student(models.Model):

stu_name = models.CharField(max_length=6, unique=True)

stu_sex = models.BooleanField(default=0)

stu_birth = models.DateField()

stu_delete = models.BooleanField(default=0)

stu_create_time = models.DateField(auto_now_add=True)

stu_operate_time = models.DateField(auto_now=True)

stu_tel = models.CharField(max_length=11)

stu_yuwen = models.DecimalField(max_digits=3, decimal_places=1, default=0)

stu_shuxue = models.DecimalField(max_digits=3, decimal_places=1, default=0)

g = models.ForeignKey(Grade)
1
2
class Meta:
db_table = 'stu'

创建学生拓展的模型:
class StuInfo(models.Model):

1
2
3
4
5
6
stu_addr = models.CharField(max_length=30)
stu_age = models.IntegerField()
stu = models.OneToOneField(Student)

class Meta:
db_table = 'stu_info'

实际操作:

1
2
3
4
5
6
1.通过某个学生拓展表去获取学生信息
2. 通过学生表获取个人拓展表的信息
3. 获取python班下的所有学生的信息和拓展表的信息
4. 获取python班下语文成绩大于80分的女学生
5. 获取python班下语文成绩超过数学成绩10分的男学生
6. 获取出生在80后的男学生,查看他们的班级

最后更新: 2018年05月31日 20:34

原始链接: http://yoursite.com/2018/05/30/Django装饰器/

× 请我吃糖~
打赏二维码