直接使用pip安装即可
pip install -i https://pypi.douban.com/simple djangorestframeworkpip install -i https://pypi.douban.com/simple markdown # Markdown support for the browsable API.
settings.py中将rest_framework字段添加到INSTALLED_APPS列表中即可
====================================================================================================================================================================================================================================================================================================================================
(资料图片仅供参考)
接下来讲解:
对象关系映射(Object Relational Mapping,简称ORM)模式的作用是在关系型数据库与业务实体对象之间进行映射通过类和对象就能操作它所对应数据表中的数据(CRUD)
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "test", "HOST": "localhost", "PORT": 3306, "USER": "admin", "PASSWORD": "123456" }}
需要满足的依赖
# Debian/Ubuntusudo apt-get install python-dev default-libmysqlclient-dev# Red Hat/CentOSsudo yum install python-devel mysql-devel# macOS (HomeBrew)brew install mysql-client
pip install mysqlclient
2.1、可以在子应用projects/models.py文件中定义数据模型2.2、一个数据模型类对应一个数据表2.3、数据模型类,需要继承Model父类或者Model子类2.4、在数据模型中,添加的类属性(Field对象)来对应数据表中的字段
from django.db import modelsclass Projects(models.Model): name = models.CharField(max_length=200) age = models.CharField(max_length=50)
# 生成迁移脚本python manage.py makemigrations# 生成数据表python manage.py migrate
terminal执行以上两条命令,则在数据库生成对应的表
上面生成迁移脚本和创建数据库表的命令行都是针对所有的,如果只想创建某一个子应用的表呢?只需要在上面的命令行后面跟上子应用名即可
# 生成指定应用的迁移脚本python manage.py makemigrations 子应用名称# 生成指定应用的数据表python manage.py migrate子应用名称
在第二步的迁移步骤中,已经实现了如何通过数据模型创建数据库表,我们知道数据库表字段有各种属性,如长度、字符类型、约束条件、默认值等等,在Django的数据模型中,我们并不需要去编写sql语句来创建数据库表,而是可以通过类和对象的方式进行数据库的增删改查等操作,这样就方便了许多。
AutoField类、CharField类、IntegerField类、TextField类、DecimalField类、DateTimeField类、DateField类、TimeField类等等,它们都继承了Field父类,我们通过查看Field源码的构造方法,可以看到很多关于字段的属性设置
def __init__(self, verbose_name=None, name=None, primary_key=False, max_length=None, unique=False, blank=False, null=False, db_index=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True, unique_for_date=None, unique_for_month=None, unique_for_year=None, choices=None, help_text="", db_column=None, db_tablespace=None, auto_created=False, validators=(), error_messages=None):verbose_name:个性化信息primary_key:主键约束,如果某一个字段中设置了primary_key=True,那么Django就不会自动创建id字段max_length:至少要指定一个该字段,它代表此字段的最大长度,不能为负数,最大长度不能超过200unique:唯一键约束blank:指定前端用户在创建数据时,是否需要传递,默认需要传递,如果不传递,设置为Truenull:指定数据在保存时是否可以为空,默认不能为空,为空设置为Truedefault:指定默认值,往往会跟black一起使用-help_text:帮助文本信息,在api接口文档平台和admin后端站点中会用于提示,往往跟verbose_name一致
而DateTimeField类、TimeField类也继承了DateField类,DateField类中的构造方法也有新的参数
auto_now:设置成True后,Django会自动添加更新记录时的时间auto_now_add:设置成True后,Django会自动添加创建记录时的时间按照上面的操作生成的数据库表的表名默认为:子应用名称_模型类名小写,如果想自定义表名,只需要在数据模型类下面定义一个Meta的子类
from django.db import modelsclass Projects(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200, verbose_name="项目名称", help_text="项目名称", unique=True) leader = models.CharField(max_length=50) programmer = models.CharField(max_length=50, verbose_name="开发人员", help_text="开发人员") tester = models.CharField(max_length=50, verbose_name="测试人员", help_text="测试人员") desc = models.TextField(verbose_name="项目简介", help_text="项目简介", blank=True, default="XXXX", null=True) create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间", help_text="创建时间") update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间", help_text="更新时间") class Meta: # Meta子类的类名固定,可以使用db_table类属性来指定表名,使用verbose_name类属性指定表的个性化描述 db_table = "tb_projects" verbose_name = "项目表"
在CRUD操作之前,为了更好的debug,我们可以引入connection模块,它可以在我们进行CRUD操作时,会显示出对应的sql语句,通过sql语句,可以及时发现错误,也可以看到sql语句的性能是否达到最优
在视图模块中引入connection模块
from django.db import connection
调试器上添加“connetion.queries”:
向数据表添加一条记录,两种方法
1、使用模型类对象来创建:project_obj = Projects(name="xxx项目3", leader="xxx项目负责人3",tester="xxx测试3", programmer="xxx研发3")project_obj.save()2、可以使用查询集的create方法,使用模型类.objects.create()方法,无需调用save方法
project_obj = Projects.objects.create(name="xxx项目4", leader="xxx项目负责人4",tester="xxx测试4", programmer="xxx研发4")
project_obj = Projects.objects.get(id=3)project_obj.name = "某某知名项目"project_obj.save()2、用模型类名.objects.filter(字段名=值).update(字段名=修改的值)
Projects.objects.filter(id=2).update(name="某某优秀的项目")
project_obj = Projects.objects.get(id=1)filter:通过过滤的方式查询,每个字段都提供了很丰富的选项进行查询操作Projects.objects.filter()a.filter支持多个过滤表达式,字段名__过滤表达式,返回的是查询集b.字段名__startswith、字段名__istartswith:过滤以xxx开头的字符串c.字段名__endswith、字段名__iendswith:过滤以xxx结尾的字符串d.字段名__gt:大于,__gte: >=, __le: <, __lte:<=e.字段名=条件与字段名__exact等价,在Django ORM中有一个内置的变量pk,为数据库模型类的主键别名f.__contains、__icontains、__in、__isnullg.如果没有指定的记录,会返回空查询集exclude:与filter相反,为反向过滤
Projects.objects.exclude(id=1)
qs =Projects.objects.filter(name__startswith="x").filter(programmer__contains="4")qs = Projects.objects.filter(name__startswith="x", programmer__contains="4")查询“或”的关系.filter(Q(查询条件1) | Q(查询条件2))
from django.db.models import QProjects.objects.filter(Q(leader__contains="1") | Q(programmer__contains="4"))
首先导入聚合函数
from django.db.models import Count,Sum,Max,Min,Avg用法
Projects.objects.annotate(Count("name"))Projects.objects.annotate(Max("name"))
Projects.objects.all().order_by("-name")
project_obj = Projects.objects.get(id=3) one = project_obj.delete()2.使用查询集.delete()
Projects.objects.filter(id=3).delete()