others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

django的models简单入门

访问量:1509 创建时间:2020-01-14

django的models模型可以分为两部分介绍:

  1. 如何定义models,通过我们的模型定义,可以创建数据库的表结构。每个模型都是一个 Python 的类,这些类继承 django.db.models.Model。模型类的每个属性都相当于一个数据库的字段。
  2. 通过对模型的定义进行数据库的增删改查等操作。定义好一个模型后,Django 提供了一套自己的语法访问数据库,实现增删改查等操作。

创建项目并配置数据库

下面介绍models定义相关内容,注意:django使用mysql(mariadb)请查看前期文章。

[root@localhost 0.17]# django-admin startproject mysite
[root@localhost 0.17]# cd mysite/
[root@localhost mysite]# vim mysite/settings.py
DATABASES = {                    #< --- 修改DATABASE内容,如下
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'mysite',
        'PASSWORD':'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

[root@localhost mysite]# python3 manage.py startapp myapp
#创建数据库并授权
[root@localhost mysite]# mysql -uroot -p
Enter password: 
MariaDB [(none)]> create database mysite DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
MariaDB [(none)]> grant all on mysite.* to 'mysite'@'%' identified by 'mypassword';

创建模型并安装app

[root@localhost mysite]# vim myapp/models.py
from django.db import models
class Person(models.Model):
    first_name = models.CharField(max_length=30) #表的字段类型是CharField,表示字符串类型,还有很多其他类型,例如数字,日期等
    last_name = models.CharField(max_length=30)
[root@localhost mysite]# vim mysite/settings.py 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',          #在INSTALLED_APPS中增加我们创建的app名称
]

执行模型迁移操作

生成迁移文件,并同步至数据库。

#makemigrations生成迁移文件,migrate将在mysql中创建表结构,这2个命令后面可以跟单个app的名字,这里省略表示对所有已经INSTALLED_APP执行数据库迁移操作。
[root@localhost mysite]# python3 manage.py makemigrations
[root@localhost mysite]# python3 manage.py migrate
#查看mysite数据库,自定义的表myapp_person已经创建好了,person表前面加了app的名字作为前缀。(其他表是django自带的表,用于后台管理,用户管理,session管理等)
[root@localhost mysite]# mysql -uroot -p
MariaDB [(none)]> use mysite
MariaDB [mysite]> show tables;
+----------------------------+
| Tables_in_mysite           |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| myapp_person               |
+----------------------------+
MariaDB [mysite]> desc myapp_person;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| first_name | varchar(30) | NO   |     | NULL    |                |
| last_name  | varchar(30) | NO   |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
注意:django会对我们的models默认创建id自增主键。方便在views视图中使用id进行数据库增删改查操作。

在视图中进行增删改查操作

#先定义person的增删改查视图,编辑myapp/views.py如下
[root@localhost mysite]# vim myapp/views.py
from django.http import HttpResponse
from myapp.models import Person

def addperson(req):
    p1=Person(first_name='东坡',last_name='苏',id=1) #<--通常不用指定id,id会自增,
    p1.save()
    return HttpResponse("<p>用户添加成功</p>")

def delperson(req):
    p1=Person.objects.get(id=1)
    p1.delete()
    return HttpResponse("<p>用户删除</p>")

def showperson(req):
    p1=Person.objects.get(id=1)
    return HttpResponse("<p>用户:%s%s"%(p1.last_name, p1.first_name))

def changeperson(req):
    p1=Person.objects.get(id=1)
    p1.first_name='太白'
    p1.last_name='李'
    p1.save()
    p1=Person.objects.get(pk=1)
    return HttpResponse("<p>用户修改为:%s%s"%(p1.last_name, p1.first_name))
#定义指向视图的路由urls.py配置:
[root@localhost mysite]# vim myapp/urls.py 
from django.urls import path, include
from . import views
urlpatterns = [
    path('addperson/', views.addperson, name='addperson'),
    path('showperson/', views.showperson, name='showperson'),
    path('delperson/', views.delperson, name='delperson'),
    path('changeperson/', views.changeperson, name='changeperson'),
]
#编辑mysite/urls.py,用include方法,将myapp/urls.py 包含到项目url配置中。
[root@localhost mysite]# vim mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('myapp/',include('myapp.urls')),
    path('admin/', admin.site.urls),
]

运行服务器python3 manage.py runserver 0.0.0.0:80,依次访问如下地址查看效果:

总结:在这个章节中简单介绍了models的定义与在视图中进行增删改查。Person模型只有2个字段,类型是CharField,models的操作简单介绍了增删改查。后面详细介绍models的多种类型和复杂一点的查询方法,例如排序、切片、多表关联查询等。

登陆评论: 使用GITHUB登陆