1.隔离app(app的urls索引设定)
1. 1 工程目录下的urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'app1/', include('app1.urls')), # 隔离app ; 注意导入include函数
]
1. 2 复制urls.py到app目录下,负责app的路由作用
from django.conf.urls import url
from app1 import views
urlpatterns = [
# 127.0.0.1:8080/app1/helloworld/ 访问地址
url(r'helloworld', views.hello),
]
2. 数据表的操作CRUD
创建可迁移文件 - migrations : python manage.py makemigrations
迁移 : python manage.py migrate
2.1 创建学生表(models.py)
对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 ,从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。
from django.db import models
# Create your models here.
# ORM 创建学生表
class Student(models.Model):
s_name = models.CharField(max_length=10, unique=True)
s_age = models.IntegerField(default=16)
s_sex = models.BooleanField(default=1)
operater_time = models.DateTimeField(auto_now=True)
# auto_now_add 添加一次时间就不再变更
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = 'student'
def to_dict(self):
return {
's_name': self.s_name,
's_age': self.s_age,
's_sex': self.s_sex,
}
2.2 查询所有学生信息
stus = Student.objects.all() --> 结果是一个查询集 QuerySet
将查询结果(对象)转换为字典
(models.py)
def to_dict(self):
return {
's_name': self.s_name,
's_age': self.s_age,
's_sex': self.s_sex,
}
(views.py)
stus_list = [stu.to_dict() for stu in stus]
2.3 条件查询
2.3.1 filter() 过滤带条件的信息(QuerySet)
查询年龄等于15的学生
stus = Student.objects.filter(s_age=15)
2,3,2 exclude() 不包含;查询年龄不等于15的学生
stus = Student.objects.exclude(s_age=15)
2.3.3 order_by() 排序
降序
stus = Student.objects.all().order_by('-id')
升序 (默认)
stus = Student.objects.all().order_by('id')
2.3.4 valuse() --> 将结果以字典的形式返回
stus = Student.objects.all().values()
2.3.5 get() (和filter()的区别) :get()查询结果是对象(object)
获取id为1的学生信息
filter 获取不到数据会返回空
stus = Student.objects.filter(id=1)
get 获取不到数据会报错; 只能返回一个数据,返回多个会报错
stus = Student.objects.get(id=1)
stus = Student.objects.get(id=1,id=2)
2.3.6 first() 获取所有学生(按照id降序)中的第一个学生信息
stus = Student.objects.all().order_by('-id').first()
2.3.7 last() 获取所有学生(按照id降序)中的最后一个学生信息
stus = Student.objects.all().order_by('-id').last()
2.3.8 模糊查询姓名
__contains
stus = Student.objects.filter(s_name__contains='小')
__startswith
stus = Student.objects.filter(s_name__startswith='小')
__endwith
stus = Student.objects.filter(s_name__endwith='小')
2.3.9 gt(大于) gte(大于等于) lt(小于) lte(小于等于)
stus = Student.objects.filter(s_age__gt=15)
stus = Student.objects.filter(s_age__gte=15)
2.3.10 __in=[] 查询id等于1,2的学生信息
stus = Student.objects.filter(id__in=[1,2,3])
2.3.11 多个条件 查询姓名中包含'小',并且年龄大于12
stus = Student.objects.filter(s_name__contains='小', s_age__gt=12)
2.3.12 F()可以将模型的两个字段进行算数运算,对字段的处理 : 查询数学成绩比语文成绩大十分的学生信息
from django.db.models import F
stus = Student.objects.filter(shuxue__gt = F('yuwen') + 10)
2.3.13 Q() 条件或运算 '~' -->表示非
from django.db.models import Q
stus = Student.objects.filter(~Q(yuwen__lt=70) | Q(s_age__lt=17))
2.4 增加数据
a. save()
def addStu(request):
if request.method == 'GET':
stu = Student()
stu.s_name = '小明'
stu.s_age = '12'
stu.shuxue = '60'
stu.yuwen = '70'
stu.math = '0'
stu.save()
return HttpResponse('创建成功')
b. init()方法
def __init__(self, s_name, s_age, yuwen, shuxue, math):
super(Student, self).__init__() # 注意要继承方法
self.s_name = s_name
self.s_age = s_age
self.yuwen = yuwen
self.math = math
self.shuxue = shuxue
stu = Student('大明', 25, 90,90,90)
stu.save()
c. create()
Student.objects.create(s_name='妲己', yuwen=67, shuxue=56, s_age=40, math=80)
2.5 删除数据
stu = Student.objects.filter(id=1)
stu.delete()
2.6 修改数据
a.
stu = Student.objects.filter(id=2).first()
stu.s_name = 'shit'
stu.save()
b.
Student.objects.filter(id=3).update(s_name = '大罗伊斯')