您的位置:首页 > 编程语言 > Go语言

Django学习之路-3使用模型

2018-11-09 21:54 417 查看

Django学习之路-3使用模型

模型理解

模型抽象了数据的构成、访问和数据之间的逻辑关系,数据库是一个独立于python的东西,Django使用一些类来和数据库打交道,那么这些类就是model的本质,那么这些类就会定义数据库的数据、对数据的访问和操作。所以model是Django和数据库的转接口。

  • ORM:ObjectRelationMap,model负责构建数据库表和交互

  • 应用的model类对应表,类中的属性对应表字段
    - 所有class都是models.Model的子类
    - 所有属性类型都是model.xxx,不能使用其他数据类型

  • Django自带数据库sqllite3(关系型、轻量级),不需要任何配置

  • 某大神建议:开发时候使用sqlite3,部署的时候使用mysql或oracle等
    - 配置其他数据库修改settings.py即可,如mysql

    DATABASES = { 			 'default': { 			 'ENGINE': 'django.db.backends.mysql', 			 'NAME': '数据库名称', 			 'PASSWORD':'数据库密码', 			 'HOST':'127.0.0.1', 			 'PORT':'3306', 			 } 			}

    - 如果是其他的数据库,那么ENGINE还有:‘django.db.backends.sqlite3’,‘django.db.backends.postgresql’,‘django.db.backends.mysql’,或 ‘django.db.backends.oracle’
    - 在__init__.py文件中,导入pymysql包:
    import pymysql

    pymysql.install_as_MySQLdb()

  • 系统在默认开启的某些应用需要至少一个数据表,比如,存储类似cookie、session等,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:

$ 	python manage.py migrate

settings.py

settings.py是一个配置文件,大概如下:

  • INSTALLED_APPS 默认包括了以下 Django 的自带应用:
    - django.contrib.admin – 管理员站点, 你很快就会使用它。
    - django.contrib.auth – 认证授权系统。
    - django.contrib.contenttypes – 内容类型框架。
    - django.contrib.sessions – 会话框架。
    - django.contrib.messages – 消息框架。
    - django.contrib.staticfiles – 管理静态文件的框架。
    -
  • (后面的等学习get后,在更新吧…)

使用model

  • 必须使用model类
    from django.db import models
  • 应用的model.py的类对应表,类中的属性对应表字段
    - 所有class都是models.Model的子类
    - 每个字段都是 Field 类的实例
    - 所有属性类型都是model.xxx,不能使用其他数据类型
  • 字段常用参数
    - max_length:规定数值最大长度
    - blank:字段是否可以为空,默认False
    - null:字段是否可以存储为null,默认False
    - default:默认值
    - unique:是否唯一
    - verbose_name:假名
  • 字段常用的类型
    参考:
    https://blog.csdn.net/weixin_37773766/article/details/80330221

创建model

  • 在这个简单的投票应用中,需要创建两个模型:问题 Question 和选项 Choice。Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
  • 编写polls/models.py
from django.db import models

class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
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.db.models.Model 类的子类
  • 每个变量都是 Field 类的实例,都表示为数据库的字段
  • 使用 ForeignKey 定义了一个关系,每个 Choice 对象都关联到一个 Question 对象

数据库生成

  • 激活模型
    为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’。在文件 mysite/settings.py 中 INSTALLED_APPS 子项添加点式路径
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
  • 模型迁移
    通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
$ python manage.py makemigrations 应用名
  • 阅读迁移
    迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式,它们其实也只是一些你磁盘上的文件,它被储存在polls/migrations/0001_initial.py 里,或者你可以运行下面命令,查看迁移好的sql语句
python manage.py sqlmigrate polls 0001
  • 创建数据表
    这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上
$ python manage.py migrate
  • 所以总结一下
    - 编辑 models.py 文件,改变模型。
    - 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
    - 运行 python manage.py migrate 来应用数据库迁移。

shell调试数据库

$ 	python manage.py shell

(详细调试命令,学习后再补充,可查阅:
https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial02/)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: