by 极光python
今天来为你们介绍 Django 框架的模型部分,模型是真实数据的简单明确的描述,它包含了储存的数据所必要的字段和行为,Django 遵循 DRY Principle 。它的目标是你只须要定义数据模型,而后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。mysql
Django 中模型是真实数据的简单明确的描述,它包含了储存的数据所必要的字段和行为,在建立模型前须要先配置好数据库。 Django 对各类数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle等,Django 为这些数据库提供了统一的调用 API。 咱们能够根据本身业务需求选择不一样的数据库。git
Python 内置 SQLite,因此你无需安装额外东西来使用它,在 TestProject
项目目录下,打开 TestProject/settings.py
配置文件, 已经配置了 SQLite 做为默认数据库。固然若是在真实项目中,咱们能够换一个更具扩展性的数据库,如Mysql等。具体配置操做以下:github
# TestProject/settings.py # Database DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
配置说明:sql
仍是以咱们以前建立的投票应用为基础,在这个应用中建立两个模型--Question和Choice。shell
下面咱们将以上模型描述经过编辑 polls/models.py
文件定义出来。数据库
# polls/models.py from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('发布日期') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
这里有如下几点须要注意:django
经过配置上面 models.py
类中建立模型的代码,已经足够 Django 为咱们建立数据库和相应表结构了,如今咱们将 polls
应用安装到咱们 TestProject
项目中。
首先再次打开 TestProject/settings.py
配置文件,在配置类 INSTALLED_APPS
中添加 polls
应用的点式路径 'polls.apps.PollsConfig'
,配置完成以下所示:浏览器
# TestProject/settings.py INSTALLED_APPS = [ 'polls.apps.PollsConfig', #新增polls路径 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
由于 PollsConfig 类写在文件 polls/apps.py 中,因此它的点式路径是 'polls.apps.PollsConfig'服务器
保存配置并退出,而后运行 makemigrations
命令, Django 会检测你对模型文件的修改,而且把修改的部分储存为一次迁移
(迁移是 Django 对于模型定义即你的数据库结构的变化的储存形式)。
$ python manage.py makemigrations polls Migrations for 'polls': polls/migrations/0001_initial.py - Create model Question - Create model Choice
执行成功后,就能够再执行 migrate
命令,将你在模型中定义的数据库修改同步到应用的数据库表结构上,执行结果以下:
$ python manage.py migrate Operations to perform: Apply all migrations: polls Running migrations: Applying polls.0001_initial... OK
数据库
迁移
操做被分解成生成和应用两个命令是为了让你可以在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不只仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
对模型对象的操做,本质上就是数据库数据的操做。下面咱们就经过对模型对象操做实现对数据库记录基本的CURD操做。
编辑 TestProject
项目下 polls/views.py
文件代码,经过访问 URL
在 Question
模型对应表中添加数据。
# polls/views.py from django.shortcuts import render # Create your views here. from django.http import HttpResponse from polls.models import Choice, Question from django.utils import timezone def index(request): return HttpResponse("你好,这是一个投票页面。") # 增长问题描述信息 def add(request): question = Question(question_text='双十一你在哪一个平台剁手?',pub_date=timezone.now()) question.save(); return HttpResponse("新增投票成功!")
再编辑 polls/urls.py
文件代码,新增一条 add
的路由,代码以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), #新增add路由 ]
保存后,经过 python manage.py runserver 127.0.0.1:8080
命令启动本地开发服务器,启动后在浏览器中输入URL地址 http://127.0.0.1:8080/polls/add
,会返回以下页面表示新增数据成功。
接下来咱们再刷新下页面,这样就会再增长一条数据,而后咱们把这两条记录查出来。
Django 提供了多种方式来查询出数据库记录,如查询上面 Question
模型对应所有数据,某个id的数据以及经过多条件过滤获得所须要的数据。依然编辑 TestProject
项目下 polls/views.py
文件,增长查询对应代码:
# polls/views.py # …… 省略部分代码 def query(request): # 经过objects这个模型管理器的all()得到全部数据行,至关于SQL中的SELECT * FROM question questionList = Question.objects.all() # 获取单个对象 response2 = Question.objects.get(id=1) # 至关于SQL中的WHERE id=1,可设置条件过滤 response3 = Question.objects.filter(id=1) #根据id字段排序 response5 = Question.objects.order_by("id") res = "" # 遍历全部对象 for q in questionList: res += str(q.id) + "." + q.question_text + " <br />" return HttpResponse("查询全部问题:<br />" + res)
再编辑 polls/urls.py
文件代码,新增一条 query
的路由,代码以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), path('query', views.query, name='query'), #新增的query路由 ]
而后再浏览器中输入 URL http://127.0.0.1:8080/polls/query
,看到以下图所求请求结果:
能够看到出现两条同样的记录,可是 id
不一样,不过这正符合咱们的预期,下面咱们将对第一条数据进行修改和删除。
修改和删除数据能够操做一条或多条记录,这取决于你的查询条件,再次编辑 TestProject
项目下 polls/views.py
文件,增长修改和删除对应代码:
# polls/views.py # …… 省略部分代码 #修改数据 def update(request): question1 = Question.objects.get(id=1) question1.question_text = '天猫和京东你会选哪一个?' question1.save() # 经过条件过滤的方式也能够更新一条或多条数据 # Question.objects.filter(id=1).update(question_text='天猫和京东你会选哪一个?') return HttpResponse("更新id=1:" + question1.question_text) #删除数据 def delete(request): question2 = Question.objects.get(id=2) question2.delete() # 经过条件过滤的方式也能够删除一条或多条数据 # Question.objects.filter(id=2).delete() # 删除全部数据 # Question.objects.all().delete() res3 = '' questionList = Question.objects.all() # 遍历全部对象 for q in questionList: res3 += str(q.id) + "." + q.question_text + " <br />" return HttpResponse("删除后查询:<br />" + res3)
再编辑 polls/urls.py
文件代码,新增一条 query
的路由,代码以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), path('query', views.query, name='query'), path('update', views.update, name='update'), # 新增update路由 path('del', views.delete, name='del'), # 新增del路由 ]
完成以上代码配置,咱们就能够经过访问 URL http://127.0.0.1:8080/polls/update
实现第一条数据的更新操做,请求后返回页面以下:
这样咱们就把第一条数据的问题描述更新了,再次经过 URL http://127.0.0.1:8080/polls/query
查询下全部数据,能够看到返回页面以下:
好,更新成功后,咱们再试下删除数据了,经过查看删除相关代码是把 id
为2的数据删除了,此次咱们访问的 URL http://127.0.0.1:8080/polls/del
,而后返回删除后再次查询全部记录的页面,以下图:
能够看到只剩下一条数据,说明咱们已经删除成功了。
本文为你们介绍了 Django 的模型,经过上面学习咱们了解到模型功能的强大,为咱们基于数据库的开发节省了大量工做量。Django还有模板,表单,路由,认证,基本的数据库管理等等内建功能,接下来将进一步的介绍 Django 提供的其余功能。
参考
示例代码:https://github.com/JustDoPython/python-100-day
关注公众号:python技术,回复"python"一块儿学习交流