django的models模型可以分为两部分介绍:
下面介绍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';
[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的多种类型和复杂一点的查询方法,例如排序、切片、多表关联查询等。