一.django ORM 简介
1.什么是ORM
- ORM : 全称 object relational mapping, 对象关系映射
- 功能 : 通过orm实现使用操作对象的方式来操作数据库中的数据
- 目的 : 就是为了能够让不懂SQL语句的人通过python面向对象的知识点也能够轻松自如的操作数据库
- 缺陷 : sql 封装死了, 有时候查询速度很慢
2.ORM与数据库的映射关系
ORM DB
类 --------------------> 表
对象 --------------------> 数据行
属性 --------------------> 字段
二.ORM的基本使用
1.创建类(表)
- 我们的模型类需要写在应用下的
models.py
文件中
from django.db import models
class Student(models.Model):
"""
CharField 类型必须设置 max_length 参数
verbose_name 是对字段的解释,每个字段都有,且是第一个默认形参,所以可以直接在第一个位置实参处写值不需要写verbose_name=
null=True 允许字段为空
default=0 设置默认值
"""
id = models.AutoField(primary_key=True,verbose_name="主键ID")
name = models.CharField(max_length=32,verbose_name="名字")
age = models.IntegerField(verbose_name="年龄")
pwd = models.IntegerField("密码",null=True)
is_delete = models.IntegerField(default=0)
如果你不指定主键 那么orm会自动帮你创建一个名为id的主键字段
如果你想让主键字段名不叫id,儿叫叫uid、sid、pid等其他名字则需要自己手动指定
2.数据库迁移命令
- 凡是对
models.py
中跟数据库相关的代码进行了更改就必须在项目目录下执行两条命令 - 这两条命令叫数据库迁移命令, 就比如上面我们创建了一个模型类, 于是我们就要进行这两条命令
python3 manage.py makemigrations
python3 manage.py migrate
3.字段的增删改查
sex = models.CharField('性别',max_length=16)
height = models.IntegerField('身高cm',null=True)
- 删 : 注释掉代码然后执行数据库迁移命令即可(删除字段对应的数据也将删除)
- 改 : 直接改代码然后执行数据库迁移命令即可
- 查 : 鼠标点点点
4.数据的增删改查
username = "shawn"
userpwd = 123
userage = 23
user_obj.models.Student.objects.create(name=username,pwd=passwd,age=userage)
user_obj = models.Student(name=username,pwd=passwd,age=userage)
user_obj.save()
user_obj = models.User.objects.filter(name=username)[0]
user_obj = models.User.objects.filter(name=username).first()
user_obj = models.User.objects.filter()
user_obj = models.User.objects.all()
models.Student.objects.filter(id=edit_id).update(name=username,pwd=password)
edit_obj = models.Student.objects.filter(id=edit_id).first()
edit_obj.name = username
edit_obj.pwd = password
edit_obj.save()
models.Student.objects.filter(id=edit_id).delete()
三.补充
1.开启多个 django 项目导致页面修改没有变化的情况
- 例如你在 cmd 命令行开启了一个 django 项目, 在 Pycharm 中又开启了一个项目, 其实一直在运行的是第一个启动起来的项目, 因为 django 默认的端口为 8000, 端口已经被占用, 后面开多少个都是无法启动的
- 解决方法 : 可以更换端口号
2.浏览器缓存问题
- 浏览器对于访问的HTML页面会做缓存, 下次访问是直接使用缓存中的文件, 导致你修改文件后在页面上看不到变化
- 解决方法 : 打开浏览器 ----> 右击检查 ----> Network ----> 勾选Disable cache
四.编写登入验证页面
1.需求
- 从数据库中读取数据, 然后对用户身份进行校验
- 校验成功返回字符串"登入成功"
- 校验失败再次返回用户登入页面
2.代码
from django.shortcuts import render,HttpResponse,redirect
def login_func(request):
from books import models
username = request.POST.get('username')
userpwd = request.POST.get('userpwd')
if request.method == 'POST':
user_obj = models.Student.objects.filter(name=username,pwd=userpwd).first()
if user_obj:
print(user_obj.name,user_obj.pwd,user_obj.age,)
return HttpResponse(f'欢迎{user_obj.name}小可爱')
return render(request,'login.html')
3.注册功能
from django.shortcuts import render,HttpResponse,redirect
def register_func(request):
from books import models
username = request.POST.get('username')
userpwd = request.POST.get('userpwd')
userage = request.POST.get('userage')
if request.method == 'POST':
user_obj = models.Student.objects.filter(name=username).first()
if not user_obj:
user_obj = models.Student(name=username, pwd=userpwd, age=userage)
user_obj.save()
return HttpResponse(f'{user_obj.name}小可爱注册成功')
return render(request, "register.html")