之后的项目可能会用到Django来编写后端,提前学习熟悉一下。
项目启动不起来的话,查看下面的文章来配置参数 Pycharm项目启动参数配置
社区的Pycharm没有办法直接创建Django项目,所以需要通过命令行创建,再使用Pycharm打开。
社区版pycharm创建django项目 - 冰箱喵 - 博客园
Django自带ORM(对象关系映射)。可以通过描述对象和数据库之间的映射,将程序中的对象自动持久化到数据库中。
ORM解析过程:
通过上面的链接创建好Django项目后,文件结构应该是类似下面的:
因为Django的ORM没办法操作数据库,所以需要自己启动数据库,通过命令行来创建数据库。
create database user default charset=utf8;
修改设置文件setting.py
中的DATABASES
配置项,将信息改成对应的数据库信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'User', # 数据库地址
'HOST': '127.0.0.1', # 数据库地址
'PORT': 3306,
'USER': 'root', # 数据库用户名
'PASSWORD': '123456'
}
}
修改__init__.py
文件,引入pymysql
模块连接数据库(需要先通过pip之类的工具安装好)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'User', # 数据库地址
'HOST': '127.0.0.1', # 数据库地址
'PORT': 3306,
'USER': 'root', # 数据库用户名
'PASSWORD': '123456'
}
}
修改models.py
文件,创建数据表对应的Models类。
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
添加对应的Models
类后,还需要在setting.py
中的INSTALLED_APPS
中添加上去。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testBackend'
]
通过命令行来创建表结构
python manage.py migrate
python manage.py makemigrations testBackend
python manage.py migrate testBackend
urls.py
配置路由
from django.urls import path
from . import testdb
urlpatterns = [
path('testdb/', testdb.testdb),
]
新建文件testdb.py
,该文件就是用来操作数据的。
\color{red}{记得启动数据库}
testBackend.models
中引入对应的Models
类
Models
对象
save
方法添加数据testdb.py
from django.http import HttpResponse
from testBackend.models import User
def testdb(request):
user = User(name='clz', age=22)
user.save()
return HttpResponse("<p>添加数据成功</p>")
User.objects.all()
获取所有数据
from django.http import HttpResponse
from testBackend.models import User
def testdb(request):
user = User(name='clz', age=22)
user.save()
return HttpResponse("<p>添加数据成功</p>")
当然,获取数据并不是只有all()方法,还可以使用filter()方法设置过滤条件、get()方法获取单个对象、order_by()对数据进行排序等。(\color{red}{方法支持链式调用})
filter()
users = User.objects.filter(name='czh')
get()
user = User.objects.get(id=2) # 如果得到的结果不只是一个对象会报错
result += f'<p>' \
f'<span> id: {user.id}</span>' \
f'<span> name: {user.name}</span>'\
f'<span> age: {user.age}</span>' \
f'</p>'
order_by()
users = User.objects.order_by("age")
# filter(id__lte = 33)意味着 <=,
# 对应SQL:select * from User where id <= 33
users = User.objects.filter(id__lte = 33).order_by('age')
还可以配合Python的切片使用
# filter(id__lte = 33)意味着 <=,
# 对应SQL:select * from User where id <= 33
users = User.objects.filter(id__lte = 33).order_by('age')
users = users[2:]
修改数据主要有两种方式:
get()
方法获取唯一的一个对象实例
save()
方法
def testdb(request):
result = "修改前:"
users = User.objects.all()
for user in users:
result += f'<p>' \
f'<span> id: {user.id}</span>' \
f'<span> name: {user.name}</span>'\
f'<span> age: {user.age}</span>' \
f'</p>'
updateuser = User.objects.get(id=1)
updateuser.age = 999
updateuser.save()
result += "修改后:"
users = User.objects.all()
for user in users:
result += f'<p>' \
f'<span> id: {user.id}</span>' \
f'<span> name: {user.name}</span>' \
f'<span> age: {user.age}</span>' \
f'</p>'
return HttpResponse("<p>" + result + "</p>")
update()
方法修改User.objects.filter(id=1).update(age=888)
删除数据只需要调用对象的delete()
方法即可,对象集合调用delete()
方法也可以
User.objects.filter(id=1).update(age=888)
User.objects.filter(id=2).delete()