前言
在MVC或者MTV设计模式中,模型(M)代表对数据库的操作。那么如何操作数据库呢?本小节就认真学习一下。首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下连接数据库需要了解的知识。
但是这里想详细的进行学习,首先对Django 一些基本的知识点进行了解。
1,Django的流程实现
django
#安装: pip3 install django
添加环境变量
#1 创建project
django-admin startproject mysite
---mysite
---settings.py
---url.py
---wsgi.py
---- manage.py(启动文件)
#2 创建APP
python mannage.py startapp app01
#3 settings配置
TEMPLATES
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"template"),
)
STATIC_URL = '/static/'
# 我们只能用 STATIC_URL,但STATIC_URL会按着你的 STATICFILES_DIRS去找
#4 根据需求设计代码
url.py
view.py
#5 使用模版
render(req,"index.html")
#6 启动项目
python manage.py runserver 127.0.0.1:8090
#7 连接数据库,操作数据
model.py
2,代码填充
根据需求,我们先完成主程序(也就是mysite/urls.py)的内容:
from mysql01 import views
# admin 后台的路由,先注释掉
urlpatterns = [
path('admin/', admin.site.urls),
# 你的路由,重点是引号中的正则表达式和后面的业务逻辑函数
path('index/',views.index),
# url(r'index/',views.index),
]
注意:关于django.urls path 和django.conf.urls url 的区别,django中 url 和 path 都是配置路径,有什么不同呢?
path 和 url 是两个不同的模块,效果都是响应返回页面,path调用的是python第三方模块或者框架,而url则是自定义的模块。
当然,主要问题在于版本: 1.x版本用url 2.x 版本用path
再填充我们APP的views
from django.shortcuts import render
# Create your views here.
def index(req):
return render(req,'index.html')
完成自己写的index.html文件(随便写的,内容如下)
testhello world
用户输入
当你写入一个HTML文件在templates中,为了让Django知道我们的HTML文件在哪里,需要修改settings文件的相应内容,但是默认情况下,他正好使用,无需修改,除非特殊情况。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 要是有这一行,如果已经存在请保持原样
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3,运行程式
直接输出下面代码即可运行Django:
python manage.py runserver
在浏览器输入下面代码即可显示index.html内容:
127.0.0.1:8000/index
一,使用Django自带的sqlite3数据库
Django通过自带的ORM框架可以操作数据库,并且自带轻量级的sqlite3数据库,Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以我们无需安装任何程式,就可以直接使用,下面我们先练习一下。
1.1 在settings中,配置数据库相关参数
因为是自带的sqlite,所以无需修改,这里我们看一下:
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
# 这里可以指定使用的数据库类型,例如mysql
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
1.2 编译models.py
Django通过自定义python类的形式来定义具体的模型,每个模型的物理存在方式就是一个python的Class,每个模型代表数据库中的一张表,每个类的实例代表数据库中的一行数据,类中的每个变量代表数据库中的一列字段。
Django通过模型,将python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过python的代码进行数据库的操作。DJango通过ORM对数据库进行操作,下面直接看代码:
from django.db import models
# Create your models here.
class UserInfo(models.Model):
'''
创建两个字段,最大长度是32,类型是char
'''
user = models.CharField(max_length= 32)
pwd = models.CharField(max_length= 32)
这里我们创建了两个字段,分别保存用户的名称和密码。
上面的代码,相当于下面的原生SQL语句。
CREATE TABLE UserInfo (
"id" serial NOT NULL PRIMARY KEY,
"user" varchar(30) NOT NULL,
"pwd" varchar(30) NOT NULL
);
注意:
Django默认自动创建自增主键ID,当然也可以自己指定主键。
上面的SQL语法基于PostgreSQL
更多字段和参数
每个字段有一些特有的参数,例如,CharField 需要 max_length 参数来指定VARCHAR 数据库字段的大小。还有一些适用于所有字段的通用参数。这些参数在文档中有详细定义,这里我们学习一下最常用的:
<1> CharField
字符串字段, 用于较短的字符串.
CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层
限制该字段所允许的最大字符数.<